for循环修改错误的数组

时间:2016-06-17 02:25:19

标签: javascript loops

我正在尝试为井字游戏构建一个人工智能,这是我第一次做任何类型的人工智能,而我无法弄清楚如何让AI尝试各种不同的行动特定情况(董事会)。 " E"是空单元格,我将它们的索引存储在一个名为available的数组中。 人工智能的举动将是插入" O"在nextBoard变量中,每次可用数组提供一次索引。 这个函数正在修改nextBoard变量,我想用它来评估下一次AI动作,给它一个分数,还有我用来评估游戏状态的实际变量。

function AiPossibleActions () {
  available=[0,1,2,3,5,6,7,8];
  board=["E","E","E","E","X","E","E","E","E"];
  var nextBoard=board
  for (var i=0; i<available.length; i++) {
    nextBoard = board;
    nextBoard[available[i]]="O";
  }
  oMovesCount++
}

当我运行该函数时,两个变量(nextBoard和board)正在修改,并且没有一个具有预期的输出。

//wrong output
 ["O", "O", "O", "O", "X", "O", "O", "O", "O"]

理想输出是每次迭代变量nextBoard等于:

//1st iteration
["O", "E", "E", "E", "X", "E", "E", "E", "E"]
//2nd iteration
["E", "O", "E", "E", "X", "E", "E", "E", "E"]
//3rd iteration
["E", "E", "O", "E", "X", "E", "E", "E", "E"]
//4th iteration
["E", "E", "E", "O", "X", "E", "E", "E", "E"]
//5th iteration
["E", "E", "E", "E", "X", "O", "E", "E", "E"]
//6th iteration
["E", "E", "E", "E", "X", "E", "O", "E", "E"]
//7th iteration
["E", "E", "E", "E", "X", "E", "E", "O", "E"]
//8th iteration
["E", "E", "E", "E", "X", "E", "E", "E", "O"]

1 个答案:

答案 0 :(得分:1)

您可能遇到该对象在javascript中是浅层副本的问题,所以

var nextBoard=board

不会制作电路板的副本,但只会复制参考数组。

在您的情况下,如果您需要副本,那么您可以使用slice,例如;

var nextBoard=board.slice()

(然后在循环内部相同),但如果你的数组元素本身就是对象,那就必须更加精细。