릿코드

[JS 코테] LeetCode 2722. Join Two Arrays by ID

Nuri-KSLV-II 2025. 5. 5. 18:10

문제 링크

https://leetcode.com/problems/join-two-arrays-by-id/description/?envType=study-plan-v2&envId=30-days-of-javascript

1. 두 배열을 합치면서, id값이 같은 경우 arr2로 override

const merged = [...arr1, ...arr2]
  .reduce((acc, item) => {
    acc.set(item.id, item);
    return acc;
  }, new Map());

2. 두 배열을 합치면서, id값이 같지만 arr1에만 있는 값이 있을 경우, 병합 (문제에서 요구한 케이스)

    const merged = [...arr1, ...arr2].reduce((acc, item) => {
    const existing = acc.get(item.id) || {};
    acc.set(item.id, { ...existing, ...item });
    return acc;
    }, new Map());

3. 풀어서 해결하는 케이스

var join = function(arr1, arr2) {
  const map = new Map();

  // 먼저 arr1을 넣는다
  for (const item of arr1) {
    map.set(item.id, { ...item });
  }

  // arr2를 넣되, 기존 값과 병합 (arr2 우선)
  for (const item of arr2) {
    if (map.has(item.id)) {
      const merged = { ...map.get(item.id), ...item };
      map.set(item.id, merged);
    } else {
      map.set(item.id, { ...item });
    }
  }

  // id 기준 정렬 + 반환
  return Array.from(map.values()).sort((a, b) => a.id - b.id);
};

4. 최종 제출한 정답

/**
 * @param {Array} arr1
 * @param {Array} arr2
 * @return {Array}
 */
//  id가 같으면 arr2가 override
var join = function(arr1, arr2) {

    const merged = [...arr1, ...arr2].reduce((acc, item) => {
    const existing = acc.get(item.id) || {};
    acc.set(item.id, { ...existing, ...item });
    return acc;
    }, new Map());

  // id값으로 오름차순 정렬순 출력
  return Array.from(merged.values()).sort((a, b) => a.id - b.id);
};

'릿코드' 카테고리의 다른 글

[LeetCode] 2667 create-hello-world-function  (2) 2024.11.12