开发者问题收集

数组未定义错误和长度函数

2021-03-25
172

大家好,我希望从你们高超的技能水平经验中找到一些答案。 我正在填充这个我知道如何做的 2D 数组,但我收到此错误:

script.js:35 未捕获的类型错误:无法设置未定义的属性“0” at script.js:35

当我单击控制台中的错误时,它指向本例中第 9 行的数字 2:gameArray[row][column]= 2;我应该将数组声明为整数数组吗?为什么我不能使用 gameArray[row].lenght 而不是 5 作为此代码第三个 for 的条件?非常感谢你们

var gameArray = new Array(5);
for (var i = 0; i < gameArray.length; i++) {
  gameArray[i] = new Array(4);
}
for (var row = 0; row < 6; row++) {
  for (var column = 0; column < 5; column++) {
    gameArray[row][column] = 2;
  }
}
console.log(gameArray);
3个回答

您最好使用数组的相关 length 属性来控制循环 - 这样可以防止您犯一次错误

var gameArray = new Array(5);
for (var i = 0; i < gameArray.length; i++) {
  gameArray[i] = new Array(4);
}
for (var row = 0; row < gameArray.length; row++) {
  for (var column = 0; column < gameArray[row].length; column++) {
    gameArray[row][column] = 2;
  }
}
console.log(gameArray);

也就是说您可以更轻松地做到这一点

var gameArray = new Array(5)
for(var i=0;i<gameArray.length;i++){
  gameArray[i] = new Array(4).fill(2);
}
console.log(gameArray)
Jamiec
2021-03-25

您的错误是典型的差一错误。

您可以使用 JavaScript 数组方法创建数组来避免此类问题:

console.log(Array(5).fill(0).map(() => Array(4).fill(2)));

如您所见,我没有使用任何索引或长度。每个元素都已初始化。我建议学习这种代码风格,因为您会在现代 JavaScript 代码中经常遇到它(我很久没有在实际项目中看到经典的 for 循环了)。

2021-03-25

gamearray 是一个包含 5 个元素的数组,而您的 for 循环是一个包含 6 个元素的数组! 因此,修改第二个 for 循环,使用 length 属性作为 for 循环的上限:

var gameArray = new Array(5);
for (var i = 0; i < gameArray.length; i++) {
  gameArray[i] = new Array(4);
}
for (var row = 0; row < gameArray.length; row++) {
  for (var column = 0; column < gameArray[row].length; column++) {
    gameArray[row][column] = 2;
  }
}
console.log(gameArray);
AV28
2021-03-25