<aside> 💡 Set을 이용해 중복 요소를 제거하는 방식의 성능이 가장 좋다
</aside>
Set
은 유니크한 값만 저장할 수 있기 때문에 new Set()
인자에 들어온 배열의 중복 요소는 자동으로 제거된다. Array.from
은 ➊유사 배열 객체나 ➋반복 가능한 객체를 얕게 복사해 새로운 배열을 반환한다. 전개문법을 사용해도 결과는 동일.
const arr = ['A', 'B', 'A', 'D', 'B', 'F'];
const deDuplicated = [...new Set(arr)];
// const deDuplicated = Array.from(new Set(arr))
console.log(deDuplicated); // [ 'A', 'B', 'D', 'F' ]
Set, Map 관련 더 자세한 내용은 [TIL] Map / Set 자료구조 노트 참고.
new Set([iterable])
: 새로운 Set 생성set.add(value)
: value 추가 후 Set 반환. 만약 인자에 입력한 value가 기존 Set 안에 있으면 아무런 작업 안함set.delete(value)
: 값 제거후, 제거 성공 여부 true / false 반환set.has(value)
: 인자에 입력한 value가 Set에 존재하는지 확인. Boolean 값 반환set.clear()
: Set 초기화set.size
: Set에 몇개의 value가 있는지 확인<aside> 💡 중복값만 따로 배열에 담고 싶을 때 유용
</aside>
arr.indexOf()
메서드는 인자에 입력한 요소가 배열에 존재하면 해당 요소의 인덱스를 반환한다. 인자에 입력한 요소가 배열에 여러개 있어도 첫번째로 찾은 요소의 인덱스를 반환한다. 없으며 -1
반환.
filter 메소드로 arr
배열의 2번째 인덱스에 있는 A
요소를 순회할 때의 인덱스는 2
지만 indexOf
로 찾은 인덱스는 0이므로 false
반환. 이 작업을 반복하면서 중복 요소를 제거한다.
const arr = ['A', 'B', 'A', 'D', 'B', 'F'];
const deDuplicated = arr.filter((el, idx) => arr.indexOf(el) === idx);
// 중복값만 배열에 담고 싶다면 arr.indexOf(el) !== idx
console.log(deDuplicated); // [ 'A', 'B', 'D', 'F' ]