循环中“ I”之前缺少var或未捕获TypeError:无法读取未定义的属性“ length”

Taras yaremkiv

尝试编写井字游戏时,我有一些JavaScript代码,但Chrome开发者工具会出现此错误

Uncaught TypeError: Cannot read property 'length' of undefined我发现当我评论'isEnd(bigArray [i] [j]);'时,在代码的末尾,它可以工作。代码:

var inputItem = 'o';
var board = [null, null, null, null, 'o', null, null, null, null];
var sign = {
  max: inputItem === "o" ? "x" : "o",
  min: inputItem === "x" ? "x" : "o"
};

function generateTable(board, sign) {
  var testBoard = [],
    nextBoard;
  for (var i = 0; i < board.length; i++) {
    nextBoard = board.slice();
    if (!nextBoard[i]) {
      nextBoard[i] = sign;
      testBoard.push(nextBoard);
    }
  }
  return testBoard;
}

function isEnd(board) {
  console.log('board', board);
  for (i = 0; i < board.length; i += 3) {
    if (board[i] === board[i + 1] && board[i + 1] === board[i + 2]) {
      return board[i] !== null ? board[i] : false;
    }
  }
  for (var j = 0; j < board.length; j++) {
    if (board[j] === board[j + 3] && board[j + 3] === board[j + 6]) {
      return board[j] !== null ? board[j] : false;
    }
  }

  if ((board[4] === board[0] && board[4] === board[8]) ||
    (board[4] === board[2] && board[4] === board[6])) {
    return board[4] !== null ? board[4] : false;
  }
}

function miniMax() {
  var testBoard = generateTable(board, sign.max);
  testBoard = testBoard.map(function(elem) {
    return generateTable(elem, sign.min);
  });
  return testBoard;
}
var bigArray = miniMax();
console.log(bigArray);


var maxArray = 0;
var tempArray = 0;
var maxCoord = 0;

for (var i = 0; i < bigArray.length; i++) {
  for (var j = 0; j < bigArray[i].length; j++) {
    console.log('i, j: ', i, " ", j);
    isEnd(bigArray[i][j]);
    maxCoord = i;
    if (tempArray > maxArray) {
      maxCoord = i;
    }
  }
}
结果是

i, j:  0   0 Script snippet #21:22  
board ["x", "o", null, null, "o", null, null, null, null] Script snippet #21:57  
i, j:  6   1 Script snippet #21:22
board [null, "o", null, null, "o", null, null, "x", null] 
盖塔诺

这是因为在函数中:

function isEnd(board) {

你有这行:

for (i = 0; i < board.length; i += 3) {

因此,i变量是全局变量。

将此行更改为:

for (var i = 0; i < board.length; i += 3) {

例子:

var inputItem = 'o';
var board = [null, null, null, null, 'o', null, null, null, null];
var sign = {
  max: inputItem === "o" ? "x" : "o",
  min: inputItem === "x" ? "x" : "o"
};

function generateTable(board, sign) {
  var testBoard = [],
      nextBoard;
  for (var i = 0; i < board.length; i++) {
    nextBoard = board.slice();
    if (!nextBoard[i]) {
      nextBoard[i] = sign;
      testBoard.push(nextBoard);
    }
  }
  return testBoard;
}

function isEnd(board) {
  console.log('board', board);
  
  //
  // This is the only line changed
  //
  for (var i = 0; i < board.length; i += 3) {
    if (board[i] === board[i + 1] && board[i + 1] === board[i + 2]) {
      return board[i] !== null ? board[i] : false;
    }
  }
  for (var j = 0; j < board.length; j++) {
    if (board[j] === board[j + 3] && board[j + 3] === board[j + 6]) {
      return board[j] !== null ? board[j] : false;
    }
  }

  if ((board[4] === board[0] && board[4] === board[8]) ||
      (board[4] === board[2] && board[4] === board[6])) {
    return board[4] !== null ? board[4] : false;
  }
}

function miniMax() {
  var testBoard = generateTable(board, sign.max);
  testBoard = testBoard.map(function(elem) {
    return generateTable(elem, sign.min);
  });
  return testBoard;
}
var bigArray = miniMax();
console.log(bigArray);


var maxArray = 0;
var tempArray = 0;
var maxCoord = 0;

for (var i = 0; i < bigArray.length; i++) {
  for (var j = 0; j < bigArray[i].length; j++) {
    console.log('i, j: ', i, " ", j);
    isEnd(bigArray[i][j]);
    maxCoord = i;
    if (tempArray > maxArray) {
      maxCoord = i;
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

定义var后出现“未捕获的TypeError:无法读取未定义的属性'length'”

来自分类Dev

未捕获的TypeError:无法读取未定义的属性“ length”

来自分类Dev

未捕获的TypeError:无法读取未定义的Google Map V3的属性“ length”

来自分类Dev

未捕获的TypeError:无法读取未定义的JQUERY自动完成的属性'length'

来自分类Dev

DataTables-未捕获的TypeError:无法读取未定义的属性'length'

来自分类Dev

Tensorflow.js:未捕获(承诺)TypeError:无法读取未定义的属性'length'

来自分类Dev

数组迭代的“未捕获的TypeError:无法读取未定义的属性'length'”

来自分类Dev

剪贴板数据-未捕获的TypeError:无法读取未定义的属性'length'

来自分类Dev

未捕获的TypeError:存在父对象时,无法读取未定义的属性“ length”

来自分类Dev

Javascript:简单函数-未捕获的TypeError:无法读取未定义的属性“ length”

来自分类Dev

EXTJS 6 Modern:缓冲存储+网格:未捕获的TypeError:无法读取未定义的属性'length'

来自分类Dev

未捕获的TypeError:使用for循环时无法读取未定义的属性'style'

来自分类Dev

jQuery对象上的循环返回未捕获的TypeError:无法读取未定义的属性“ lat”

来自分类Dev

为什么将length定义为变量,而不是在for循环中使用queue.length?

来自分类Dev

JavaScript循环中的.length -1与.length

来自分类Dev

捕获TypeError:无法读取leaflet.js上未定义的属性“ length”

来自分类Dev

.ajax JSON TypeError:无法读取未定义的属性“ length”

来自分类Dev

TypeError:无法读取ReactDataGrid中未定义的属性'length'

来自分类Dev

TypeError:无法读取未定义的API TMDB的属性'length'

来自分类Dev

无法读取未定义的属性“ length”

来自分类Dev

在 javascript Uncaught TypeError 中使用数组的动态循环时,for 循环中的问题:无法在 saveSign 读取未定义的属性“id”

来自分类Dev

在循环中定义var

来自分类Dev

使用其他语言时的引导日期选择器错误:未捕获的TypeError:无法读取未定义的属性“ length”

来自分类Dev

使用D3和d3.slider显示SVG元素:未捕获的TypeError:无法读取未定义的属性'length'

来自分类Dev

Three.js导入Blender模型:未被捕获的TypeError:无法读取未定义的属性“ length”

来自分类Dev

访问cart.order_items.length给出TypeError:无法读取未定义的属性'length'

来自分类Dev

for循环中的键/值对存在问题:无法读取未定义的属性“成就” \ n

来自分类Dev

For循环:TypeError:无法读取未定义的属性“ 0”

来自分类Dev

在for循环中定义函数

Related 相关文章

  1. 1

    定义var后出现“未捕获的TypeError:无法读取未定义的属性'length'”

  2. 2

    未捕获的TypeError:无法读取未定义的属性“ length”

  3. 3

    未捕获的TypeError:无法读取未定义的Google Map V3的属性“ length”

  4. 4

    未捕获的TypeError:无法读取未定义的JQUERY自动完成的属性'length'

  5. 5

    DataTables-未捕获的TypeError:无法读取未定义的属性'length'

  6. 6

    Tensorflow.js:未捕获(承诺)TypeError:无法读取未定义的属性'length'

  7. 7

    数组迭代的“未捕获的TypeError:无法读取未定义的属性'length'”

  8. 8

    剪贴板数据-未捕获的TypeError:无法读取未定义的属性'length'

  9. 9

    未捕获的TypeError:存在父对象时,无法读取未定义的属性“ length”

  10. 10

    Javascript:简单函数-未捕获的TypeError:无法读取未定义的属性“ length”

  11. 11

    EXTJS 6 Modern:缓冲存储+网格:未捕获的TypeError:无法读取未定义的属性'length'

  12. 12

    未捕获的TypeError:使用for循环时无法读取未定义的属性'style'

  13. 13

    jQuery对象上的循环返回未捕获的TypeError:无法读取未定义的属性“ lat”

  14. 14

    为什么将length定义为变量,而不是在for循环中使用queue.length?

  15. 15

    JavaScript循环中的.length -1与.length

  16. 16

    捕获TypeError:无法读取leaflet.js上未定义的属性“ length”

  17. 17

    .ajax JSON TypeError:无法读取未定义的属性“ length”

  18. 18

    TypeError:无法读取ReactDataGrid中未定义的属性'length'

  19. 19

    TypeError:无法读取未定义的API TMDB的属性'length'

  20. 20

    无法读取未定义的属性“ length”

  21. 21

    在 javascript Uncaught TypeError 中使用数组的动态循环时,for 循环中的问题:无法在 saveSign 读取未定义的属性“id”

  22. 22

    在循环中定义var

  23. 23

    使用其他语言时的引导日期选择器错误:未捕获的TypeError:无法读取未定义的属性“ length”

  24. 24

    使用D3和d3.slider显示SVG元素:未捕获的TypeError:无法读取未定义的属性'length'

  25. 25

    Three.js导入Blender模型:未被捕获的TypeError:无法读取未定义的属性“ length”

  26. 26

    访问cart.order_items.length给出TypeError:无法读取未定义的属性'length'

  27. 27

    for循环中的键/值对存在问题:无法读取未定义的属性“成就” \ n

  28. 28

    For循环:TypeError:无法读取未定义的属性“ 0”

  29. 29

    在for循环中定义函数

热门标签

归档