新手!我正在通过一个2d数组生成一个棋盘,并尝试替换由“白皇后”和“黑皇后”坐标指定的数组值,现在只是让白皇后工作。
下面我想将0替换为1,其中whitequeen[0,5]是,但是循环将整个列替换为1,而不仅仅是指定的j。我想知道我哪里做错了,是否有一种不涉及循环的可能更简单的方法。
我的代码:
function generatedBoard (whiteQueen, blackQueen) {
let mainArr = new Array(8).fill([0, 0, 0, 0, 0, 0, 0, 0])
for (i = 0; i < mainArr.length; i++) {
for (j = 0; j < mainArr[i].length; j++) {
if (i === whiteQueen[0] && j === whiteQueen[1]) {
mainArr[i].splice(j, 1, "1")
}
}
}
return mainArr
}
let whiteQueen = [0, 5];
let blackQueen = [5, 0];
console.log(generatedBoard(whiteQueen, blackQueen));
Result:
[ [ 0, 0, 0, 0, 0, '1', 0, 0 ],
[ 0, 0, 0, 0, 0, '1', 0, 0 ],
[ 0, 0, 0, 0, 0, '1', 0, 0 ],
[ 0, 0, 0, 0, 0, '1', 0, 0 ],
[ 0, 0, 0, 0, 0, '1', 0, 0 ],
[ 0, 0, 0, 0, 0, '1', 0, 0 ],
[ 0, 0, 0, 0, 0, '1', 0, 0 ],
[ 0, 0, 0, 0, 0, '1', 0, 0 ] ]
2条答案
按热度按时间eivnm1vs1#
当
mainArr
数组是使用fill
方法,,new Array(8).fill([0, 0, 0, 0, 0, 0, 0, 0])
,在新创建的数组中,所有元素([0, 0, 0, 0, 0, 0, 0, 0]
)在内存中引用到相同的值。因此,当您尝试更新数组中的一个值时,因为所有数组都是链接的,所以所有数组中的值都会更改。
要创建一个没有这样链接的数组,可以使用循环手动创建,如下所示:
对于更新,您可以更轻松地执行以下操作:
上述代码将用替换精确值
1
.最终代码:
jutyujz02#
下一行创建一个数组,每个元素引用同一个数组,即。
[0, 0, 0, 0, 0, 0, 0, 0]
.更改任何元素
mainArr
将改变它的所有元素。你什么时候使用
Array.prototype.fill()
方法,则必须使用静态值。