通过游戏学习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],但是,正如您从代码中看到的,直接或在运行时分配它们,我将得到未定义的错误。
没有什么允许我在运行时分配这些?
发布于 2019-04-30 20:20:56
两个问题:
initGame来创建所有这些子数组,否则没有定义weaponLevelNfo[0],因此weaponLevelNfo[0][0]将触发您得到的错误。<=)。更改:
for (让i=0;i <= weaponLevelNfo.length;i++) {
通过
for (让i=0;i< weaponLevelNfo.length;i++) {
如果没有这种更改,最后一次迭代实际上是在槽i中向数组添加一个元素,因此数组的长度会增加.循环变成无穷大。请注意,有更短的方法来定义这样的嵌套数组。例如:
var weaponLevelNfo = Array.from({length:14}, () => Array.from({length:9}, () => [0, 0]));发布于 2019-04-30 20:14:15
当您用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]);发布于 2019-04-30 20:19:12
使用索引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));
https://stackoverflow.com/questions/55928015
复制相似问题