所以我试图在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上尝试过这个,甚至在控制台中也是如此。我真的不知道我做错了什么。
答案 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,因此你不会引用同一个。临时数组。数组通过引用传递,因此如果您更喜欢独立副本,则应该对它们进行克隆。