【问题标题】:How can you merge two objects into same property in JavaScript?如何在 JavaScript 中将两个对象合并到同一个属性中?
【发布时间】:2020-11-16 14:59:45
【问题描述】:

我有 2 个单独的 JS 对象需要合并到同一个属性中。

对象当前如下所示:

对象 1:

[0:{"acircuit":"ABCDEFGH","astatus":"Test"}, 1:{"acircuit":"IJKLMNOP","astatus":"Test2"}]

对象 2:

[0:{"bcircuit":"ABCDEFGH","bstatus":"Test3"}, 1:{"bcircuit":"IJKLMNOP","bstatus":"Test4"}]

我需要将这些结果合并为一个,使其如下所示:

[
    0:{"acircuit":"ABCDEFGH","astatus":"Test","bcircuit":"ABCDEFGH","bstatus":"Test3"}, 
    1:{"acircuit":"IJKLMNOP","astatus":"Test2","bcircuit":"IJKLMNOP","bstatus":"Test4"}
]

当前代码如下所示:

allResults = {this.state.aCircuitResults.concat(this.state.bCircuitResults)}

但是,结果如下所示:

[
    0:{"acircuit":"ABCDEFGH","astatus":"Test"},
    1:{"acircuit":"IJKLMNOP","astatus":"Test2"}
    2:{"bcircuit":"ABCDEFGH","bstatus":"Test3"}, 
    3:{"bcircuit":"IJKLMNOP","bstatus":"Test4"}
]

提前致谢。

【问题讨论】:

    标签: javascript arrays reactjs object merge


    【解决方案1】:

    您可以使用mapObject.assign,假设您想通过它们在数组中的位置来组合它们:

    const result = firstArray.map((firstObject, index) => Object.assign({}, firstObject, secondArray[index]));
    

    例子:

    const firstArray = [{"acircuit":"ABCDEFGH","astatus":"Test"},{"acircuit":"IJKLMNOP","astatus":"Test2"}];
    
    const secondArray = [{"bcircuit":"ABCDEFGH","bstatus":"Test3"},{"bcircuit":"IJKLMNOP","bstatus":"Test4"}];
    
    const result = firstArray.map((firstObject, index) => Object.assign({}, firstObject, secondArray[index]));
    
    console.log(result);

    如果您需要通过属性(例如,acircuitbcircuit)将它们关联起来,请从其中一个由该属性键入的 Map 构建一个 Map,然后您可以在 map 操作中使用查找:

    const second = new Map(secondArray.map(obj => [obj.bcircuit, obj]));
    const result = firstArray.map(firstObject => Object.assign({}, firstObject, second.get(firstObject.acircuit)));
    

    例子:

    const firstArray = [{"acircuit":"ABCDEFGH","astatus":"Test"},{"acircuit":"IJKLMNOP","astatus":"Test2"}];
    
    const secondArray = [{"bcircuit":"ABCDEFGH","bstatus":"Test3"},{"bcircuit":"IJKLMNOP","bstatus":"Test4"}];
    
    const second = new Map(secondArray.map(obj => [obj.bcircuit, obj]));
    const result = firstArray.map(firstObject => Object.assign({}, firstObject, second.get(firstObject.acircuit)));
    
    console.log(result);

    【讨论】:

    • 成功了 - 感谢您的帮助和快速响应。
    【解决方案2】:

    Array.prototype.map()spread syntax 结合使用:

    const result = arrayA.map((a, i) => ({...a, ...arrayB[i]}));
    

    完成sn-p:

    const arrayA = [{"acircuit":"ABCDEFGH","astatus":"Test"}, {"acircuit":"IJKLMNOP","astatus":"Test2"}];
    const arrayB = [{"bcircuit":"ABCDEFGH","bstatus":"Test3"}, {"bcircuit":"IJKLMNOP","bstatus":"Test4"}];
    
    const result = arrayA.map((a, i) => ({...a, ...arrayB[i]}));
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 2020-07-05
      • 1970-01-01
      • 2016-07-18
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      相关资源
      最近更新 更多