Javascript 2D数组问题更改特定元素更改列
当我改变地形[2][3]的值时,它将改变整个列,而不仅仅是特定的坐标。第一个函数创建阵列,第二个函数定义1和2的地形Javascript 2D数组问题更改特定元素更改列,javascript,arrays,Javascript,Arrays,当我改变地形[2][3]的值时,它将改变整个列,而不仅仅是特定的坐标。第一个函数创建阵列,第二个函数定义1和2的地形 var ArrayMaker = function(cols, rows, con1, con2) { var array = [] for (var i = 0; i < cols; i++){ array[i] = con1 for (var j = 0; j< rows; j++){ array[i][j] = con2
var ArrayMaker = function(cols, rows, con1, con2) {
var array = []
for (var i = 0; i < cols; i++){
array[i] = con1
for (var j = 0; j< rows; j++){
array[i][j] = con2
}
}
return array
}
var setup = function() {
var terrain = ArrayMaker(height/50, width/50, [], 1)
var nLakes = Math.floor(Math.random() * 6)
for (var i = 0; i < nLakes; i++){
var x = Math.floor(Math.random() * (terrain.length + 1))
var y = Math.floor(Math.random() * (terrain[1].length + 1))
console.log(x + " " + y)
terrain[x][y] = 2
}
console.log(terrain)
}
这是因为初始化代码将相同的
con1
数组(最初为[])分配给新数组的所有行。因此,实际上只有一行有多个引用:
for (var i = 0; i < cols; i++){
array[i] = con1
/* ... */
}
谢谢你修复了这个问题,你能解释一下splice()函数吗,我不明白它是如何工作的,并且修复了这个问题。我会尽快将您的评论标记为答案。
slice
将从给定数组中复制每个值,从而从给定数组中创建一个新数组slice
允许指定参数仅复制数组的一部分,但如果没有参数,则复制整个数组。扩展语法也可以实现同样的效果:array[i]=[…con1]代码>或带有数组[i]=array.from(con1)代码>。选择你认为最容易的。请参考此了解切片。您还可以使用[].concat(con1)
复制阵列
for (var i = 0; i < cols; i++){
array[i] = con1
/* ... */
}
for (var i = 0; i < cols; i++){
array[i] = con1.slice(); // Now it is a separate copy
/* ... */
}