프로그래밍 언어/JAVA

자바 스크립트에서 배열을 복제하는 가장 빠른 방법- slice vs for

Rateye 2021. 11. 4. 10:48
728x90
반응형
질문 : 자바 스크립트에서 배열을 복제하는 가장 빠른 방법-슬라이스 대 'for'루프

JavaScript에서 배열을 복제하려면 다음 중 사용하는 것이 더 빠릅니까?

### 슬라이스 방법

var dup_array = original_array.slice();

### For 루프

for(var i = 0, len = original_array.length; i < len; ++i)
   dup_array[i] = original_array[i];

두 가지 방법 모두 얕은 복사 만 수행한다는 것을 알고 있습니다. original_array 에 개체에 대한 참조가 포함되어 있으면 개체는 복제되지 않지만 참조 만 복사되므로 두 배열 모두 동일한 개체에 대한 참조를 갖게됩니다. 그러나 이것은이 질문의 요점이 아닙니다.

나는 속도에 대해서만 묻는 것입니다.

답변

어레이를 복제하는 방법은 최소한 6 개 (!)입니다.

  • loop
  • slice
  • Array.from()
  • concat
  • spread operator (FASTEST)
  • map A.map(function(e){return e;});

다음 정보를 제공하는 huuuge BENCHMARKS 스레드가 있습니다.

  • 깜박이는 브라우저의 경우 slice() 가 가장 빠른 방법이고 concat() 은 약간 느리고 while loop 는 2.4 배 느립니다.
  • 다른 브라우저의 경우 while loop 가 가장 빠른 방법입니다. 이러한 브라우저에는 sliceconcat 대한 내부 최적화가 없기 때문입니다.

 

 

2016 년 7 월에도 마찬가지입니다.

다음은 브라우저의 콘솔에 복사하여 붙여넣고 여러 번 실행하여 그림을 볼 수있는 간단한 스크립트입니다. 밀리 초를 출력하고 낮을수록 좋습니다.

while 루프

n = 1000*1000;
start = + new Date();
a = Array(n); 
b = Array(n); 
i = a.length;
while(i--) b[i] = a[i];
console.log(new Date() - start);

slice

n = 1000*1000;
start = + new Date();
a = Array(n); 
b = a.slice();
console.log(new Date() - start);

이러한 메서드는 Array 개체 자체를 복제하지만 배열 내용은 참조로 복사되며 딥 복제되지 않습니다.

origAr == clonedArr //returns false
origAr[0] == clonedArr[0] //returns true
출처 : https://stackoverflow.com/questions/3978492/fastest-way-to-duplicate-an-array-in-javascript-slice-vs-for-loop
728x90
반응형