220910 TIL 인간은 망각의 동물이다.

코딩 테스트 문제를 풀다 중복을 제거할 일이 생겼었는데 분명 며칠 전에도 코딩 테스트 풀면서 중복 제거할 일이 있어서 중복 제거하는 방법을 찾고 사용까지 했었던 기억이 났었는데 오늘 다시 하려니까 생각이 1도 나지 않았다.

인간은 망각의 동물이라는 것을 다시 한번 깨닫게 되는 순간이었다.

 

 

그 당시에 중복제거 방법을 찾아보고 사용만 했었지 따로 정리를 하거나 추가적으로 더 공부하지 않았었다. 그래서 그런지 중복 제거했었던 것만 기억이 나고 어떻게 하는지는 모르는 상황이 발생했었다.

 

몰라서 찾아보는 것까지는 좋았지만 내 것으로 만들지 못해 결국에는 안 찾아본 것과 똑같은 결과를 초래했다...

 

잊어버리지 않게 한번 더 공부하고 정리하는 JS에서 배열 중복 제거하는 방법

Set 이용하기

set은 중복되는 데이터의 저장을 허용하지 않는 자료구조이며, 키가 없는 값이 저장이 된다.

중복되는 데이터가 있는 배열을 set에 추가하면 set의 특징 때문에 알아서 중복되는 값들을 제거하고 Set객체가 생성이 된다.

const number = [1, 1, 3, 4, 1];

const set = new Set(number);

console.log(...set);

// 실행결과
// 1, 3, 4

Set -> Array

만일 중복이 제거된 배열을 가지려면 spread 구문이 필요하다. new Set()을 하면 새로운 Set객체가 생성되기 때문에 spread구문으로 펼쳐서 새로운 배열에 담아야 한다.

const number = [1, 1, 3, 4, 1];

const set = new Set(number);

const uniqueNumber = [...set];

console.log(uniqueNumber);

// 실행결과
// [1, 3, 4]

 

그리고 이건 set에 대해 좀 더 찾아보다 알게 된 사실인데 set은 키가 없이 값만 저장이 된다고 하지만, map객체와 유사성을 위해 set.values()와 set.keys()는 같은 값을 반환한다고 한다. (mdn설명)

const number = [1, 1, 3, 4, 1];

const set = new Set(number);

console.log("key : " + [...set.keys()]);
console.log("value : " + [...set.values()]);

// "key : 1, 3, 4"
// "value : 1, 3, 4"

 

공부하다 보면 이 정도는 다음에 안 까먹겠지 하고 정리 안 하고 넘어간 게 많았는데 (set도 그중에 하나) 정리하지 않으면 무조건 잊어버린다는 것을 알게 되었다.

아무리 간단한 개념이나 메서드라도 처음 보고 사용한다면 그것에 대해 정리하는 건 선택이 아닌 필수다.