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
가 가장 빠른 방법입니다. 이러한 브라우저에는slice
및concat
대한 내부 최적화가 없기 때문입니다.
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
반응형
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
자바 int []를 List<Integer>로 변환하는 방법 (0) | 2021.11.10 |
---|---|
Java에서 InputStream을 String으로 변환하는 가장 쉬운 방법 (0) | 2021.11.04 |
JSLint 또는 JSHint JavaScript 유효성 검사를 사용해야 하는 이유 (0) | 2021.11.04 |
JavaScript의 객체 배열에서 고유 한 값을 얻는 방법 (0) | 2021.11.03 |
중첩 된 JavaScript 개체 키의 존재 여부 테스트 (0) | 2021.11.03 |