[JS] Array.includes 와 Set.has

순민·2022년 9월 14일
1
post-thumbnail

incldueshas 중 뭐가 더 빠를까?
자료구조를 생각해보면 바로 예상이 갈 것이다.

let n = 20000;
let arr = Array.from({ length: n }, (v, i) => i + 1); 
console.time( 'includes Test' );
arr.includes(10000)
console.timeEnd( 'includes Test' );
let set = new Set( arr );
console.time( 'has Test' );
set.has(10000)
console.timeEnd( 'has Test' );

🚀 코드 실행 결과

incldus Test -> 0.010009765625 ms
has Test -> 0.003173828125 ms

당연하게도 has로 조회하는게 더 빠르다.

조회 함수시간 복잡도
Array.inclduesO(n)
Set.hasO(1)

결과를 보고 includes 대신 무조건 has를 써야겠다! 라는 생각이 들 수 있다.
하지만, 항상 has를 사용하는게 좋은건 아니다.
두가지 경우를 보자!

1️⃣ client에서의 has

사이즈가 큰 배열(10만 이상)을 조회하고 싶을 때
set 자료구조에 넣어서 조회하면 매우 빠르게 조회가 가능할 것이다.
하지만, client단에서 굳이 has를 사용하기 위해 set 에 배열 데이터를 넣어야할까?
10만 이상의 데이터를 client단에서 다룰일이 없다고 생각한다.
또한, 10만 이상의 데이터를 조회할 일은 더더욱 없다.

https://stackoverflow.com/questions/39007637/javascript-set-vs-array-performance

위 글을 보면 10만 이상의 데이터를 다룰때 유의미한 차이가 발생한다.


그리고 위 사진처럼 현재 크롬 브라우저에선 배열의 사이즈가 16,777,216를 넘어서면 maximum size exceeded 에러가 발생한다.

client단에선 includes를 사용하자..!

2️⃣ server에서의 has

서버단에서는 db에 있는 데이터를 조회하는 일이 아니라면 inlcudes 대신 has 를 사용하면 좋을거 같다.

결론

조회에 있어선 hasincludes 보다 빠르지만, 상황에 맞게 사용해야할 거 같다.

잘못된 정보가 있다면 댓글로 지적 부탁드립니다!🙇‍♂️

profile
개발을 재밌게!

0개의 댓글