2016-12-20 1 views
0

JavaScript로 2 차원 배열을 만들고 싶지만 몇 가지 문제가 있습니다.배열 채우기가 제대로 작동하지 않습니다.

정의 된 크기의 2 차원 배열을 만드는 두 함수가 같은 방식으로 작동하지 않는 이유를 이해할 수 없습니다. 전용 "거짓"으로 우리가 볼 수 있듯이

[ [ false, false, false ], 
[ false, false, false ], 
[ false, false, false ] ] // array OK 

[ [ false, false, false ], 
[ false, false, false ], 
[ false, false, false ] ] // arrayFill OK 

[ [ false, false, false ], 
[ false, true, false ], 
[ false, false, false ] ] // array OK 

[ [ false, true, false ], 
[ false, true, false ], 
[ false, true, false ] ] // arrayFill FAIL 

, 두 배열이 잘 가득 : 여기

function createArray(size) { 
    const arr = new Array(size); 
    for (let i = 0; i < size; ++i) { 
     arr[i] = new Array(size).fill(false); 
    } 
    return arr; 
} 

function createArrayFill(size) { 
    return new Array(size).fill(new Array(size).fill(false)); 
} 

const array = createArray(3); 
const arrayFill = createArrayFill(3); 

console.log(array); 
console.log(arrayFill); 

array[1][1] = true; 
arrayFill[1][1] = true; 

console.log(array); 
console.log(arrayFill); 

이 출력됩니다.

두 배열 모두 [1] [1]을 "true"로 두지 만 두 번째 배열에서는 두 번째 열의 모든 셀을 "true"로 설정합니다.

이유를 알고 계십니까?

두 console.log가 동일한 배열을 표시하지만 동일한 코드가 동일한 결과를 내지 않는 이유를 이해할 수 없습니다.

번째 경우

답변

4

(I 코드를 테스트 용 V7.1.0 Node.js를 사용하고)는 각 행에서 동일한 개체 Array 외측 배열을 작성한다.

+0

감사합니다. 이상하게도'console.log'는 같은 배열을 보여줍니다. – lludol

+0

@lludol - 그것에 대해 이상한 점이 있습니까? 두 번째 경우에 동일한 배열 객체가 외부 배열의 각 위치에 있기 때문에'console.log'는 외부 배열을 반복 할 때마다 동일한 배열을 반복해서 표시합니다. –

관련 문제