通过游戏学习JS。当然简化是一个点击器:-)好吧,所以我对此有很多帮助,但是数组部分并没有下沉.JS数组不像我习惯的数组那样工作。两部分问题:1。为什么下面的代码继续说weaponlevelIfo[0]
未定义,何时定义?请解释一下你的答案,不要只是纠正我的LOL 2.我在运行时填充代码更有意思
如上所述,我所遇到的所有研究以及视频都谈论静态数据,即它是在编程级别而不是运行时间。
我有一个非常有耐心的社区人,试图帮助我理解JS数组,但我必须是盲目的,因为我没有看到它。我可以用其他语言做得很好。但JS?不。
// produces weaponLevelNfo[weaponId][level][cost] and [goldperclick]
// weapon, level 1-9, cost/goldperclick on each level
var weaponLevelNfo = new Array(14); // Outter array comprised of weapons 0-14
function initGame() {
for (let i=0; i <= weaponLevelNfo.length; i++) {
weaponLevelNfo[i] = new Array(9); // create leves array under weaponid array
for (let j = 0; j < weaponLevelNfo[i].length; j++) {
// loop through each 9 levels changing as needed
weaponLevelNfo[i][j] = new Array(2); // create an object for readability
}
}
}
initGame();// added - forgot to add this in the original post (sorry)
weaponLevelNfo[0][0][2]=3;
console.log(weaponLevelNfo[0][0][2]);
// always gives me weaponLevelNfo[0] not defined
我更喜欢结果
weaponLevelNfo[x][y].cost,
weaponLevelNfo[x][y].incomePerClick,
但我很高兴
weaponLevelNfo[x][y][z],
weaponLevelNfo[x][y][z],
但正如您从代码中看到的那样,直接或在运行时分配它们,我得到未定义的错误
允许我在运行时分配这些内容的缺失是什么?
两个问题:
initGame
来创建所有这些子数组,否则weaponLevelNfo[0]
没有被定义,因此weaponLevelNfo[0][0]
将触发你得到的错误。<=
)。更改:
for (let i=0; i <= weaponLevelNfo.length; i++) {
通过
for (let i=0; i < weaponLevelNfo.length; i++) {
如果没有这种改变,最后一次迭代实际上是在插槽i
中向数组添加一个元素,因此数组的长度增加......循环变为无限。请注意,有更短的方法来定义这样的嵌套数组。例如:
var weaponLevelNfo = Array.from({length:14}, () => Array.from({length:9}, () => [0, 0]));
当您使用new Array(2)
在javascript中创建数组时,这是一个包含两个位置的数组。在此示例(new Array(2)
)中,您可以在索引0和索引1处访问它。请考虑以下内容:
var newArr = new Array(2);
然后,您可以通过以下方式访问这两个位置:
var position1 = newArr[0];
var position2 = newArr[1];
所以当你尝试这个:
var position = newArr[2];
这将抛出一个未定义的异常。
您可以将示例代码的结尾更改为:
weaponLevelNfo[0][0][1]=3;
console.log(weaponLevelNfo[0][0][1]);
使用索引为0和1的两个元素Array(2)
定义数组,但使用索引2。
要初始化由零填充的多维数组(如果不是删除.fill(0)
),请使用
[...Array(14)].map(x=>[...Array(9)].map(y=>Array(2).fill(0)));
let a=[...Array(14)].map(x=>[...Array(9)].map(y=>Array(2).fill(0)));
a[13][8][1]=3;
console.log('Last element value:',a[13][8][1]);
console.log(JSON.stringify(a));