无法在2d数组中分配值

时间:2017-09-13 02:29:18

标签: javascript arrays

所以我试图在javascript中创建一个二维数组,但我不确定我做错了什么。

这是我的代码。

var result = [];
var temp = [];
for(var i=0;i<3;i++){
    temp.push(0);
}
for(var i=0;i<3;i++){
    result.push(temp);
}

所以这应该创建一个3x3的数组。现在这应该是仅为第二行的值分配值的代码。

result[1][1] = 'red';

但它只会导致整行变更。

[[0, 'red', 0],
[0, 'red', 0],
[0, 'red', 0]]

我在我的网站上,在codepen上尝试过这个,甚至在控制台中也是如此。我真的不知道我做错了什么。

2 个答案:

答案 0 :(得分:4)

result中的所有三个条目都是对完全相同的temp数组的引用。对一个人的改变会导致对其他人的改变,因为他们完全相同。

相反,您需要创建三个单独的数组。例如:

var result = []
for (var i = 0; i < 3; i++) {
    result[i] = [];
    for (var j = 0; j < 3; j++) {
        result[i][j] = 0;
    }
}

答案 1 :(得分:0)

尝试更换:

result.push(temp);

使用:

result.push(temp.slice());

这将克隆temp,因此你不会引用同一个。临时数组。数组通过引用传递,因此如果您更喜欢独立副本,则应该对它们进行克隆。