【问题标题】:How to replace existing array objects of one array to another array in javascript如何在javascript中将一个数组的现有数组对象替换为另一个数组
【发布时间】:2018-07-23 13:54:42
【问题描述】:
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 替换为arr2,在arr2 中具有相同的id 但名称值不同。

下面的结果我应该进入 arr1

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

【问题讨论】:

  • @str 不要将此任务标记为可能重复。我已经根据我的要求提出了这个问题。之前提出的问题是针对不同的要求。
  • 有什么不同?甚至您得到的答案也与副本中的完全相同。

标签: javascript


【解决方案1】:

您可以使用 map 和 find 替换 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)

【讨论】:

  • 你应该解释一下mapfind||在做什么
【解决方案2】:

这是我对这个问题的解释。 只有在 arr2 中找到 id 时才复制名称。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2018-05-08
    • 2021-07-09
    相关资源
    最近更新 更多