반응형
배열에서 중복값을 걸러내야할때가 있음. 근데 이게 중복값이 몇개가 있냐, 배열이 deep한 친구냐(막 배열안에 객체있고 그런), 최신문법을 써도 되냐 등에 따라 써야할 방법이 다름. 그래서 정리함.
---
1. indexOf와 filter를 사용하기
const arr = [1, 2, 1, 3, 4, 3, 5, 1, 1, 3, 3, 1, 5];
// [1, 2, 3, 4, 5]
arr.filter(function(item, index) {
return arr.indexOf(item) == index;
});
중복값이 있음 = indexOf로 찾았을때 index랑, filter함수 내에 index랑 값이 다름
을 이용한 형식임. 저 두값이 같다는 의미는 중복이 없다는 것이기떄문에 저렇게 써주면 중복없는 친구들만 빠져나옴.
무난한 방법.
2. set을 사용하기
const arr = [1, 2, 1, 3, 4, 3, 5, 1, 1, 3, 3, 1, 5];
[...new Set(arr)] // [1,2,3,4,5]
set 문법 자체가 고유한 값만 뽑아내기때문에 이를 이용한 형식임.
신규문법을 쓰지 못한다면 나가리행.
3. reduce를 사용하기
const arr = [1, 2, 1, 3, 4, 3, 5, 1, 1, 3, 3, 1, 5];
arr.sort().reduce(function(acc, curr) {
let length = acc.length;
if (length == 0 || acc[length - 1] != curr) {
acc.push(curr)
};
return acc;
}, []) // [1, 2, 3, 4, 5]
reduce는 거진 예시가 더하기 빼기같은거길래 어디다쓰나 했더니 이런곳에서도 쓰인다.
우선 sort()로 순서대로 정리해주는 것이 우선임.
reduce는 '쌓인값(혹은 시작값)'과 '현재값'을 왔다갔다 비교해주기때문에 중복된 친구들이 서로 옆에 있어야하기때문임.
예를들어 [1,1,2,3...]이라는 배열을 reduce를 돌린다면
1차 ---> [] vs 1 ---> length가 0이니까 일단 []에 1을 아묻따 넣어줌
2차 ---> [1] vs 1 ---> 이미 배열에 1이 있음. 근데 이번에 현재값도 1이다? 그러면 패스
이런식으로 진행되는것임.
'누산기'라는 역할이 새삼 중요했구나라는걸 깨닫게 된당..
좀더 파바야되겠음.
'Javascript' 카테고리의 다른 글
Promise.all 쓸때 에러 (0) | 2023.01.10 |
---|---|
음수 숫자를 양수로 바꾸기 (0) | 2022.10.11 |
공백/텍스트없는 태그 유니코드로 잡아내기 (0) | 2022.08.24 |
javascript 몇몇 문법 속도 벤치마크 정리 (0) | 2022.06.28 |
event.target에서 element 이름 찾는 방법 & 효율성, matches와 contains 차이 (0) | 2022.06.27 |