November 04, 2021
Array()
와 Array.from()
의 차이를 찾아 보았다. 그러면서 요소를 채운 배열을 만들 때 어떤 방법을 택하는 게 더 효율적인가가 궁금해져서 검색해봤다.
stackoverflow의 이 글에서 여러 가지 방법들을 소개해주고 있었는데 두 방법 중 어느 것이 더 좋다는 명확한 답은 없었다.
Most efficient way to create a zero filled JavaScript array?
그래서 직접 테스트해보았다.
0이 아니라 해당하는 인덱스 + 1을 채운 총 길이 10,000의 배열을 만들었다.
Array(10000).fill().map((_, i) => i + 1)
을 이용해서 만드는 방법(Test 1)과 Array.from({length: 10000}, (_, i) => i + 1))
을 이용해서 만드는 방법(Test 2)을 일단 테스트했다.
그러고 나서 스택오버플로우에서 첫 번째 방법보다 더 빠르다고 하는 방법(Test 3)도 추가로 테스트해보았다.
> console.time('calc');
Array(10000);
.fill()
.map((_, i) => i + 1);
console.timeEnd('calc');
calc: 0.490234375 ms
> console.time('calc2');
Array.from({ length: 10000 }, (_, i) => i + 1);
console.timeEnd('calc2');
calc2: 1.035400390625 ms
> console.time('calc3');
let a = new Array(10000);
for (let i = 0; i < 1000; i++) a[i] = i + 1;
console.timeEnd('calc3');
calc3: 0.21484375 ms
이 세 가지 방법 중에서는 3번의 방법이 가장 빠르다. 하지만 지금까지 써왔던 대로 1번의 방법을 사용하고자 한다.
3번보다 1번이 쓰기 간편하고, 일반적인 코딩테스트에서는 위의 예시만큼 크기가 큰 배열을 만들 일이 거의 없으므로 큰 성능 차이를 만들진 않을 것이기 때문이다.