javascript - 在 javascript 中重命名和更改属性/值的最有效方法
问题描述
这是我的问题。
如何从 A 对象创建 B 对象?在本机 js 中尽可能快,(我不关心旧浏览器,我可以使用任何新的 javascript 东西)。Ofc的谈话可能会很长很长...
var objectA = [
{text: 'Hello you', sender_name:'Indiana Jones'},
{text: 'What are you doing', sender_name:'Indiana Jones'},
{text: 'Nothing and you ?', sender_name:'Han Solo'},
{text: 'I have covid...', sender_name:'Indiana Jones'},
{text: 'it wont be better soon', sender_name:'Rick Deckard'}
]
var objectB = {
conversation: [
{text: 'Hello you', sender_ID: 0},
{text: 'What are you doing', sender_ID: 0},
{text: 'Nothing and you ?', sender_ID: 1},
{text: 'I have covid...', sender_ID: 0},
{text: 'it wont be better soon', sender_ID: 2}
],
names: {0: 'Indiana Jones', 1: 'Han Solo', 2: 'Rick Deckard'}
}
编辑:现在在这里我如何在 b 对象中添加消息(变量没有相同的名称,但你有这个想法)。这个方法很好,因为我不知道 A 对象中的所有键。例如,一条消息可以具有其他消息没有的第三或第四个属性。但我觉得它可以优化。
for(const msg in msgs){
this.msgs.push(msgs[msg]);
this.msgs[this.msgs.length - 1].time = this.msgs[this.msgs.length - 1].timestamp_ms;
delete this.msgs[this.msgs.length - 1].timestamp_ms;
for(const someone in this.people){
if(this.msgs[this.msgs.length - 1].sender_name == this.people[someone]){
this.msgs[this.msgs.length - 1].author = someone;
delete this.msgs[this.msgs.length - 1].sender_name;
}
}
}
解决方案
var objectA = [
{text: 'Hello you', sender_name: 'Indiana Jones'},
{text: 'What are you doing', sender_name: 'Indiana Jones'},
{text: 'Nothing and you ?', sender_name: 'Han Solo'},
{text: 'I have covid...', sender_name: 'Indiana Jones'},
{text: 'it wont be better soon', sender_name: 'Rick Deckard'}
];
const conversion = arr => {
const arr1 = [...new Set(arr.map(val => val.sender_name))]
const names = {...arr1};
return {
conversation: arr.reduce((acc, val) => {
const index = arr1.findIndex(item => item===val.sender_name)
return acc.concat({text: val.text, sender_ID: index})
}, []),
names
}
}
console.log(conversion(objectA))
推荐阅读
- css - 如何设置弹性行的高度但仍允许行垂直扩展?
- spring-boot - springdoc swagger-ui 重定向不包括主机名
- javascript - 如何使用单个变量(vanilla JS)更改多个元标记描述?
- rust - Rust:Unicode 感知字符串匹配
- r - R [Shiny]:如何制作显示动态系统模型的响应式闪亮应用程序?
- php - 从 php 执行时,Bash 脚本的行为不同
- react-native - 世博会反应本机导航的问题
- php - 运行“php artisan make:model Flight -mfsc”返回“-s”选项不存在。
- python - 导出/查看整个张量 (764-d)
- firebase - Flutter Firebase 如何将流构建器与流的动态计数一起使用(流合并不起作用)