찾다

 >  Q&A  >  본문

"Array.prototype.fill()은 새 인스턴스를 생성하는 대신 객체를 사용하여 참조를 전달합니다."

<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>
P粉682987577P粉682987577521일 전486

모든 응답(2)나는 대답할 것이다

  • P粉878510551

    P粉8785105512023-08-24 00:43:53

    허용된 답변은 훌륭하며 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: 이 바이올린으로 테스트했습니다.

    회신하다
    0
  • P粉461599845

    P粉4615998452023-08-24 00:21:01

    먼저 어떤 값이든 사용할 수 있습니다(예: undefined)填充数组,然后您就可以使用map:

    으아아아 으아아아

    회신하다
    0
  • 취소회신하다