javascript - JS数组3深迷路
问题描述
通过游戏学习 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++) {
如果没有这种变化,最后一次迭代实际上是在 slot 中向数组添加
i
一个元素,因此数组的长度会增加......循环变为无限。
请注意,有更短的方法来定义这样的嵌套数组。例如:
var weaponLevelNfo = Array.from({length:14}, () => Array.from({length:9}, () => [0, 0]));
推荐阅读
- regex - 谷歌数据工作室中的正则表达式提取
- reactjs - 有条件渲染时重定向渲染空白页
- python - 我正在尝试让演员“玩家”在屏幕上显示(与其他演员一起)并为其添加控件
- jar - 创建 jar 文件会导致执行错误
- java - 为什么 Jackson 不反序列化某些 XML 元素?
- java - 是否有必要在构造函数中指定每个 Java 类的属性?
- javascript - Element-Plus 中 el-pagination 的 current-page/currentPage 属性不起作用(?)
- python - 当我尝试使用 pip 安装软件包时遇到连续的问题
- python - 如何使用 DTW - 动态时间规整在 python 中对齐多个时间序列(不仅仅是 2 个)?
- android - 使用 Android 版 Aeron 时