制作有两个皇后的棋盘

gra*_*lor 6 javascript

我希望在终端中制作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)

ggo*_*len 8

此代码仅创建一个板行阵列,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#fillArray#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)