首页 > 解决方案 > 在 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;
        }
    }
      
}

标签: javascriptnative

解决方案


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))

推荐阅读