我有两个数组,看起来像这样:
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}];
您可以
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"
}
]