我想在JavaScript中创建一个二维数组但我遇到了一些问题。
我不明白为什么这两个函数(只是创建一个具有定义大小的二维数组)的工作方式不同。
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);
这是输出:
[ [ 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
正如我们所看到的,两个数组都填充得很好:只有“假”。
对于两个数组,我们将[1] [1]设置为“true”,但在第二个数组中,它将第二列的每个单元格设置为“true”。
你知道为什么吗?
我不明白为什么两个console.log都显示相同的数组,但相同的代码不会产生相同的结果。
(我正在使用node.js v7.1.0来测试代码)
答案 0 :(得分:4)
在第二种情况下,您在每行中使用相同的Array
对象填充外部数组。