首页 > 解决方案 > 根据与不同数组中对象的属性匹配的值,为数组中的每个对象添加属性

问题描述

我有两个对象数组:

const arr1 = [ {key: '12', name: 'john'}, {key: '9', name: 'steve'}, {key: '4', name: 'harry'}, {key: '2', name: 'jane'} ];

const arr2 = [ {key: '12', age: '29', gender: 'm'}, {key: '9', age: '43', gender: 'm'}, {key: '4', age: '19', gender: 'm'}, {key: '2', age: '65', gender: 'f'} ];

arr1将始终包含与 相同数量的对象arr2,并且key属性将始终保持一致,例如在上面的示例'12', '9', '4', '2'中,两个数组中都存在键。

我正在寻找一种有效的方法来将name每个对象的属性添加到具有相同键属性值arr1的对象中。arr2以上是一个简化的示例,在我的用例中,两个数组都可能包含 300 多个对象。

预期结果:

arr3 = [ {key: '12', age: '29', gender: 'm', name: 'john'}, {key: '9', age: '43', gender: 'm', name: 'steve'}, {key: '4', age: '19', gender: 'm', name: 'harry'}, {key: '2', age: '65', gender: 'f', name 'jane'} ];

我可以通过一个嵌套循环来实现这一点,该循环遍历 in 中的每个对象arr1并检查 in 中的每个对象arr2,但想知道是否有一种简化/更有效的方法使用最新版本的 ECMAScript 中的一些函数(我仍然学习)。

标签: javascriptarraysecma

解决方案


假设 arr1 和 arr2 总是相同的长度并按它们的键排序,你可以这样做:

let arr3=arr2;
for (let i = 0;i<arr1.length;i++){
    arr3[i].name=arr1[i].name;
}

我这样做的输出:

[
  { key: '12', age: '29', gender: 'm', name: 'john' },
  { key: '9', age: '43', gender: 'm', name: 'steve' },
  { key: '4', age: '19', gender: 'm', name: 'harry' },
  { key: '2', age: '65', gender: 'f', name: 'jane' }
]


推荐阅读