각기 다른 배열 객체를 비교하기

Updated:

예제

case1 중복되지 않는 값만 반환하기

let arr1 = [
  { id: 1, name: '야호' },
  { id: 3, name: '야호' },
  { id: 2, name: '야호' },
  { id: 4, name: '야호' },
];
let arr2 = [
  { id: 1, name: '야호' },
  { id: 3, name: '야호' },
  { id: 2, name: '야호' },
  { id: 4, name: '야호' },
  { id: 5, name: '야호' },
  { id: 6, name: '야호' },
];
const arr1IDs = new Set(arr1.map(({ id }) => id));

const combined = [...arr2.filter(({ id }) => !arr1IDs.has(id))];
console.log(combined); // [{ id: 5, name: '야호' }, { id: 6, name: '야호' }]

풀이

case1번의 풀이는 해당 배열에 있는 아이디에 대한 중복값을 제거하고 나머지 id만 추출한 다음 arr2를 풀면서 filter로 해당 배열 안 객체의 아이디를 중복값 제거한 값과 아이디 값이 일치하지 않는(중복되지 않는)값들을 반환합니다.

case2 중복된 값을 제거한 나머지 값만 반환하기

let arr1 = [
  { id: 1, name: '야호1' },
  { id: 3, name: '야호2' },
  { id: 2, name: '야호3' },
  { id: 4, name: '야호4' },
];
let arr2 = [
  { id: 1, name: '야호' },
  { id: 3, name: '야호' },
  { id: 2, name: '야호' },
  { id: 4, name: '야호' },
  { id: 5, name: '야호' },
  { id: 6, name: '야호' },
];
const arr1IDs = new Set(arr1.map(({ id }) => id));

const combined = [...arr1, ...arr2.filter(({ id }) => !arr1IDs.has(id))];
console.log(combined);
/*
결과
[
  { id: 1, name: '야호1' },
  { id: 3, name: '야호2' },
  { id: 2, name: '야호3' },
  { id: 4, name: '야호4' },
  { id: 5, name: '야호' },
  { id: 6, name: '야호' }
]
*/

풀이

set을 이용하여 arr1의 객체들 중 id의 중복을 제거하고 해당 변수들을 합쳐준다.

Tags:

Categories:

Updated: