[Medium] LeetCode JS 30 - 2722. Join Two Arrays by ID (根据 ID 合并两个阵列)
2024年3月7日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
LeetCode 30 Days of JavaScript
本题来自 LeetCode 的 30 天 JacaScript 挑战
2722. Join Two Arrays by ID (根据 ID 合并两个阵列)题目描述
给定两个阵列 arr1
和 arr2
,回传一个新的阵列 joinedArray
。两个输入阵列中的每个物件都包含一个 id
栏位。joinedArray
会透过 id
将arr1
和 arr2
合并。joinedArray
的长度应为唯一值id
的长度。回传的阵列应按id
升幂排序。
如果一个 id
存在于一个阵列中,但不存在于另一个阵列中,则该物件应包含在被合并的阵列中。如果两个物件共用一个id
,则它们的属性应进行合并:
- 如果一个键只存在于一个物件中,则该键值对应该包含在物件中。
- 如果一个键在两个物件中都包含,则
arr2
中的值应覆写arr1
中的值。
// 范例ㄧ
输入:
arr1 = [
{“id”:1,“x”:1},
{“id”:2,“x”:9}
],
arr2 = [
{“id”:3,“x”:5}
]
输出:
[
{“id”:1,“x”:1},
{“id”:2,“x”:9},
{“id”:3,“x”:5}
]
解释:没有共同的 id,因此将 arr1 与 arr2 直接合并起来。
// 范例二
输入:
arr1 = [
{"id": 1, "x": 2, "y": 3},
{"id": 2, "x": 3, "y": 6}
],
arr2 = [
{"id": 2, "x": 10, "y": 20},
{"id": 3, "x": 0, "y": 0}
]
输出:
[
{"id": 1, "x": 2, "y": 3},
{"id": 2, "x": 10, "y": 20},
{"id": 3, "x": 0, "y": 0}
]
解释:共同的 id 为 2,因此将 arr2 的 id 2 会盖过 arr1 的 id 2。
本题解答
以下是本题的解答,详细解题思路可以在 E+ 成长计划看到。如果想练习更多题目,推荐可以到 GreatFrontEnd 上练习
解法
var join = function (arr1, arr2) {
const objMap = {};
for (const obj of arr1) {
objMap[obj.id] = obj;
}
for (const obj of arr2) {
objMap[obj.id] = { ...objMap[obj.id], ...obj };
}
return Object.values(objMap);
};