각기 다른 배열 객체를 비교하기
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의 중복을 제거하고 해당 변수들을 합쳐준다.