为什么我的for循环会将数组的所有值更改为相同的东西?
for (var i = 0; i < arr.length; i++) {
arr[i] = otherarr[i];
}
它将arr中的所有值更改为otherarr完成时的最后一个元素。 它们的长度相同。 我是编程新手,有人可以帮帮我吗?
我正在制作骑士之旅,当我按下按钮时,我想让它显示完成它的可能方法。
var rightmoves = ["e8", "g7", "h5", "f6", "e4", "g3", "h1", "f2", "d1", "b2", "a4", "c3", "d5", "b6", "a8", "c7", "b5", "a7", "c8", "d6", "c4", "a3", "b1", "d2", "f1", "h2", "g4", "e3", "f5", "h6", "g8", "e7", "c6", "d8", "b7", "a5", "b3", "a1", "c2", "d4", "f3", "e1", "g2", "h4", "g6", "h8", "f7", "g5", "h7", "f8", "e6", "f4", "h3", "g1", "e2", "c1", "a2", "b4", "d3", "c5", "a6", "b8", "d7", "e5"];
for (var i = 0; i < rightmoves.length; i++) {
moves[i] = knight;
moves[i].row = rightmoves[i].charAt(1);
console.log(moves[i].row)
}
knight具有类似于棋盘上的行和col的属性,并且移动存储它所做的移动。 当我在chrome中查看控制台中的移动时,移动有64个对象,它们都具有相同的行值,但是控制台日志会将行的所有正确值都放入。
答案 0 :(得分:1)
您正在将相同的对象引用knight
推送到每个数组索引中。
尝试使用Object#assign()
来推送浅拷贝,以便在数组的每个索引中都有唯一的对象
for (var i = 0; i < rightmoves.length; i++) {
moves[i] = Object.assign({},knight);// shallow copy of knight object
moves[i].row = rightmoves[i].charAt(1);
console.log(moves[i].row)
}