Most efficient way to create a zero filled JavaScript array

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)도 추가로 테스트해보았다.

Test 1 (✅)

> console.time('calc');
  Array(10000);
    .fill()
    .map((_, i) => i + 1);
  console.timeEnd('calc');
calc: 0.490234375 ms

Test 2

> console.time('calc2');
  Array.from({ length: 10000 }, (_, i) => i + 1);
  console.timeEnd('calc2');
calc2: 1.035400390625 ms

Test 3 (Fastest)

> 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번이 쓰기 간편하고, 일반적인 코딩테스트에서는 위의 예시만큼 크기가 큰 배열을 만들 일이 거의 없으므로 큰 성능 차이를 만들진 않을 것이기 때문이다.


Written by정선아
🌱 공부한 것을 기록하여 성장하기 위한 블로그입니다.

GitHubGmail