我希望在终端中制作8 x 8的棋盘。我已经制作了正确的8 x 8网格,但是现在不能将两个皇后加为1
我一直在尝试,就像在代码arrayz [0] [1] = 1中看到的那样。我想知道问题是否出在我的循环中,还是有一种简单的方法可以将两个插入到问题中。
const generateBoard= function(){
let arrayz = []
let set= []
let newArray = []
for (i = 0; i < 8; i++){
newArray.push(0)
}
for (y = 0; y < 8; y++){
//newArray[0][1] = 1
arrayz.push(newArray)
arrayz[0][1] = 1 //my failed code that im trying to use to input a single one
}
return arrayz
}
console.log(generateBoard(whiteQueen, blackQueen))
[ [ 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, 0, 0, 0, 0 ] ] //what i keep getting
[ [ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, , 0, 0, 0, 0, 0, 1 ] ]//what i want
Run Code Online (Sandbox Code Playgroud)
此代码仅创建一个板行阵列,newArray而不是所需的8。该阵列arrayz中的所有8个条目都仅引用newArray。修改其中任何一个都会修改全部8个,这显然不是目的。
实际上,在Stack Overflow上打印输出显示如下:
[
[
/**id:2**/
0,
1,
0,
0,
0,
0,
0,
0
],
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/
]
Run Code Online (Sandbox Code Playgroud)
该标签将每个引用数组标记为指向第一个具有id 2的元素的指针。这是可运行的示例:
[
[
/**id:2**/
0,
1,
0,
0,
0,
0,
0,
0
],
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/
]
Run Code Online (Sandbox Code Playgroud)
参考问题可以通过多种方式解决。例如,改变
arrayz.push(newArray)
Run Code Online (Sandbox Code Playgroud)
至
arrayz.push(newArray.slice());
Run Code Online (Sandbox Code Playgroud)
完整复制newArrayusing Array#slice,消除不必要的别名。
制作二维零网格的另一种方法是使用Array构造函数Array#fill和Array#map:
const generateBoard= function(){
let arrayz = []
let set= []
let newArray = []
for (i = 0; i < 8; i++){
newArray.push(0)
}
for (y = 0; y < 8; y++){
//newArray[0][1] = 1
arrayz.push(newArray)
arrayz[0][1] = 1 //my failed code that im trying to use to input a single one
}
return arrayz
}
console.log(generateBoard())Run Code Online (Sandbox Code Playgroud)