如何在javascript中将一个数组的现有数组对象替换为另一数组

时间:2018-07-23 13:54:43

标签: javascript

var arr1 = [{
    id: '111',
    name: 'aaa'
}, {
    id: '222',
    name: 'bbb'
}, {
    id: '333',
    name: 'ccc'
}, {
    id: '444',
    name: 'ddd'
}];


var arr2 = [{
    id: '111',
    name: 'xyz'
}, {
    id: '333',
    name: 'abc'
}];

我的要求:我需要用aar1中具有相同ID但名称值不同的arr2替换arr2

在结果以下,我应该进入arr1

var arr1 = [{
    id: '111',
    name: 'xyz'
}, {
    id: '222',
    name: 'bbb'
}, {
    id: '333',
    name: 'abc'
}, {
    id: '444',
    name: 'ddd'
}];

2 个答案:

答案 0 :(得分:2)

您可以使用map来查找替换arr1中的arr2名称。 map函数遍历arr1的每个元素,find将同时匹配id和找到的匹配对象。如果找不到,我们将使用||返回arr1项目。运算符。

const result = arr1.map(item =>  arr2.find(item2 => item.id === item2.id) || item)

工作示例:

var arr1 = [{
  id: '111',
  name: 'aaa'
}, {
  id: '222',
  name: 'bbb'
}, {
  id: '333',
  name: 'ccc'
}, {
  id: '444',
  name: 'ddd'
}];


var arr2 = [{
  id: '111',
  name: 'xyz'
}, {
  id: '333',
  name: 'abc'
}];

const result = arr1.map(item =>  arr2.find(item2 => item.id === item2.id) || item)
console.log(result)

答案 1 :(得分:0)

这是我对问题的解释。 仅当在arr2中找到ID时才复制名称。

arr1.forEach(e1 => {
    var e2 = arr2.find( e => e.id === e1.id );
    if (e2) { e1.name = e2.name; }
});