[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 合併兩個陣列)

題目描述

給定兩個陣列 arr1arr2,回傳一個新的陣列 joinedArray。兩個輸入陣列中的每個物件都包含一個 id 欄位。joinedArray 會透過 idarr1arr2 合併。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);
};
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們