阵列填充不正常

时间:2016-12-20 20:11:48

标签: javascript arrays

我想在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来测试代码)

1 个答案:

答案 0 :(得分:4)

在第二种情况下,您在每行中使用相同的Array对象填充外部数组。