根据 id 合并数组


1.题目描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var join = function (arr1, arr2) {
// 保存重构的 arr1 数据
let IdObject = {};
// 重构 arr1 的数据结构,将 id 提取出来作为键存储 arr1 中的对象
for (const obj of arr1) {
IdObject[obj.id] = obj;
}
// 遍历 arr2 中的对象
for (const obj of arr2) {
// 如果 arr1 中存在正在遍历的 id,则合并 id 相同的属性
if (IdObject[obj.id]) {
// Object.assign() 静态方法将一个或者多个源对象中所有可枚举的自有属性复制到目标对象,并返回修改后的目标对象。
// 如果目标对象与源对象具有相同的键(属性名),则目标对象中的属性将被源对象中的属性覆盖,后面的源对象的属性将类似地覆盖前面的源对象的同名属性。
Object.assign(IdObject[obj.id], obj);
} else {
// 如果 arr1 中不存在正在遍历的 id,则添加改对象
IdObject[obj.id] = obj;
}
}
// 将结果升序排序
const sortedObject = Object.values(IdObject).sort((a, b) => {
a.id - b.id;
});
return sortedObject;
};

arr1 = [
{ id: 1, x: 1 },
{ id: 2, x: 9 },
];
arr2 = [{ id: 3, x: 5 }];

console.log(join(arr1, arr2));
console.log("end");