[Medium] LeetCode JS 30 - 2722. Join Two Arrays by ID (根據 ID 合併兩個陣列)
2024年3月7日
💎 加入 E+ 成長計畫 與超過 400+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
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);
};