[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 合并两个阵列)

题目描述

给定两个阵列 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 上追蹤我們