比较并映射缺失的对象值数组javascript

问题描述 投票:0回答:1

我有两个数组,看起来像这样:

const arr1 = [{'id':'1' 'name':'name11'}, {'id':'3', 'name':'name13'}, {'id':'4', 'name':'name14'}];
const arr2 = [{'id':'1', 'name':'name1', 'phone' : 12345}, {'id':'2', 'name':'name2', 'phone' : 12345}, {'id':'3', 'name':'name3', 'phone' : 12345}];

现在我需要根据 arr1 的值将这些数组合并为一个。相同的字段(名称)应保留 arr1 的值,某些字段(电话)应保留 arr2。如果现场电话不存在于两个数组中,则应按默认值 00000 追加, 所以期望的结果应该是这个样子:

[{'id':'1' 'name':'name11', 'phone' : 12345}, {'id':'3', 'name':'name13', 'phone' : 12345}, {'id':'4', 'name':'name14', 'phone' : 00000}];
javascript arrays ecmascript-6
1个回答
0
投票

您可以

map()
覆盖
arr1
,然后将对象与
arr2
中的对象合并,我们可以用
find()

找到

然后,检查合并对象上是否有手机,如果没有,返回前添加。

const arr1 = [{'id':'1', 'name':'name11'}, {'id':'3', 'name':'name13'}, {'id':'4', 'name':'name14'}];
const arr2 = [{'id':'1', 'name':'name1', 'phone' : 12345}, {'id':'2', 'name':'name2', 'phone' : 12345}, {'id':'3', 'name':'name3', 'phone' : 12345}];

const res = arr1.map(o => {
    let merged = { ...arr2.find(e => e.id === o.id), ...o };
    if (!merged.phone) {
        merged.phone = '0000';
    }
    return merged;
});
console.log(res);

[
  {
    "id": "1",
    "name": "name11",
    "phone": 12345
  },
  {
    "id": "3",
    "name": "name13",
    "phone": 12345
  },
  {
    "id": "4",
    "name": "name14",
    "phone": "0000"
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.