我要写一个小游戏,它需要一个二维数组来存储数据,
for (let i = 0; i < rowNum; i++) {
snakeRow.push(new Array(rowNum).fill({ isWall: false, isSnake: false, orient: 0 }));
for (let j = 0; j < rowNum; j++) {
let temprow = document.createElement("li");
temprow.setAttribute("x", j);
temprow.setAttribute("y", i);
if (i === 0 || i === rowNum - 1 || j === 0 || j === rowNum - 1) {
temprow.style.backgroundColor = 'black';
snakeRow[i][j].isWall = true;
}
playground.appendChild(temprow);
}
}
当我console.log(snakeRow)时,我发现所有isWall都是真实的。 似乎它用我的对象的相同引用填充了数组,并且mdn证实了我的猜测。
// Objects by reference.
var arr = Array(3).fill({}) // [{}, {}, {}];
arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]
但是为什么fill()这样工作。我不认为充满相同事物的数组像数组一样工作,而只能是单例实例。
还有什么比使用for循环将对象推送到我的数组更好的了吗?谢谢。