JAVASCRIPT -

배열 내 객체(Object) 중복 id 값 제거

  • -

안녕하세요 TriplexLab입니다. 👋👋

오늘은 배열 내 객체 프로퍼티 값 중에 중복으로 들어간 것을 제거하는 작업은 필수입니다.
여러 가지 방법으로 해결해보겠습니다.

// id가 중복되는 것을 제거하시오 
let example = [
	{ id: 123, Text:'AAA' }, 
    { id: 456, Text:'BBB' }, 
    { id: 123, Text:'CCC' }
];
//item을 localStorage에 저장합니다.
function save(name, val) {
    typeof(Storage) !== 'undefined' && localStorage.setItem(name, JSON.stringify(val));
};

//item을 localStorage에 있는 값을 조회합니다.
function get(name){
	return JSON.parse(localStorage.getItem(name));
}

 


accumulator를 이용하여 중복 제거합니다.

const newArray = example.reduce(function(acc, current) {
  if (acc.findIndex(({ id }) => id === current.id) === -1) {
    acc.push(current);
  }
  return acc;
}, []);

save('name', newArray);

결과) 중복제거 되어 저장된 모습.
결과) 중복제거 되어 저장된 모습.

 

const newArray = example.filter((item, i) => {
  return (
    example.findIndex((item2, j) => {
      return item.id === item2.id;
    }) === i
  );
});

save('name', newArray);

filter에는 3번째 인자로 callback 함수가 들어갑니다. 이것을 이용한 방법

const newArray = example.filter(
  (arr, index, callback) => index === callback.findIndex(t => t.id === arr.id)
);

save('name', newArray);

결과) 중복제거 되어 저장된 모습.
결과) 1,2번 모두 중복제거 되어 저장된 모습.

 

Set을 이용하여 중복 제거합니다.
하나의 단점이 있습니다.
id가 같으나, 다른 속성이 있다면, 중복이라 생각하지 않고 리턴합니다. 아래와 같은 경우입니다.

const newArray = [...new Set(example.map(JSON.stringify))].map(JSON.parse);

save('name', newArray);

결과) 중복제거 되어 저장된 모습.
결과) 중복 제거 안된 모습.

즉, new Set은 객체의 속성이 1개(배열의 원소들)만있을 경우 써야 합니다.
아래와 같은 경우입니다.

const example2 = ['AAA', 'BBB', 'CCC', 'AAA', 'AA']; 

const newArray = [...new Set(example2.map(JSON.stringify))].map(JSON.parse); 
save('name', newArray);

결과) 중복제거 되어 저장된 모습.
결과) 중복제거 되어 저장된 모습.

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.