"Array.prototype.fill()은 새 인스턴스를 생성하는 대신 객체를 사용하여 참조를 전달합니다."
P粉682987577
2023-08-23 09:15:17
<p>길이가 <code>x</code>인 새 배열을 인스턴스화하려고 잠시 놀고 있었는데, 여기서 배열의 모든 요소는 값 <code>y</code>로 초기화되었습니다. <
<pre class="brush:php;toolbar:false;">var arr = new Array(x).fill(y);</pre>
<p>이 방법은 <code>y</code> 값이 <strong>객체</strong>가 아닌 경우에 잘 작동합니다.
즉, <code>y</code>가 객체이면 다음 조건이 충족됩니다. </p>
<pre class="brush:php;toolbar:false;">var arr = new Array(2).fill({});
arr[0] === arr[1]; //결과는 true입니다.
arr[0].test = '문자열';
arr[1].test === 'string'; //결과도 true입니다.</pre>
<p>채우기 기능을 사용할 때 각 요소마다 새 객체를 생성해야 한다고 선언하는 방법이 있나요? 아니면 루프로 변환해야 합니까? </p>
허용된 답변은 훌륭하며 90%의 시간 동안 작동합니다.
그러나 고성능 JS 애플리케이션을 만들고 대규모/대형 배열을 사용하는 경우 Array.map(..)은 배열을 생성하므로 메모리 및 프로세서 사용량 측면에서 많은 부하가 발생합니다. 복사.
저는 고전적인 for 루프를 사용하는 것을 권장합니다:
으아악6가지 대안을 테스트한 결과 다음과 같은 결과를 얻었습니다.
Array.map(), 위와 같음(11배 느림! ):
으아악for loop, 최상의 옵션(가장 빠름):
으아악forEach(6배 느림):
으아악[2020-08-27 업데이트] 일리아스 카림이 또 다른 방법을 제안했습니다
Array.from (30배 느림! ) - 최고의 구문을 가지고 있음에도 불구하고 성능 측면에서는 분명히 더 나쁩니다. :(
으아악[..Array(..)] (5배 느림! )
으아악Array.push(..), 성능 측면에서 2위(2배 느림! )
으아악PS: 이 바이올린으로 테스트했습니다.
먼저 어떤 값이든 사용할 수 있습니다(예:
으아아아 으아아아undefined
)填充数组,然后您就可以使用map
: