我仍在学习JS(不是jquery)。因此,在学习中,我从一个简单的游戏开始。我发现了一个问题。我无法使这些数组正常工作,因为它们正在生成NaN
。
var clickMultiplier = 1.11;
var idleMultiplier = 1.15;
var idleBuffsCost = [];
idleBuffsCost[0] = 100;
var clickBuffsCost = [];
clickBuffsCost[0] = 100;
var trainerBuffsCost = [];
trainerBuffsCost[0] = 1250;
for (i = 1; i <= 20; i++) {
var j = i - 1;
idleBuffsCost[i] += idleBuffsCost[j] * idleMultiplier;
clickBuffsCost[i] = clickBuffsCost[i] + clickBuffsCost[j] * clickMultiplier;
trainerBuffsCost[i] += trainerBuffsCost[j] * 1.25;
}
console.log(clickBuffsCost[0]); // works = 100
console.log(clickBuffsCost[1]); // does not work NaN
我在做什么错? 而且,我习惯做数组(如上面)
... idleBuffsCost[i-1]
但是,这似乎不起作用。 你怎么看?我没有看到树木的森林吗(我通常使用php / mysql / pascal / qb64(和其他派生语言)和其他几种语言编程-只是将JS添加到列表中哈哈哈)
ps不同的分配是因为我尝试了不同的逻辑运算。
感谢这里的一些人-我犯了一个简单的错误。循环试图为尚未分配的索引分配值。这是解决方法-我删除了+ =,只剩下=
idleBuffsCost[i] = idleBuffsCost[j] * idleMultiplier;
clickBuffsCost[i] = clickBuffsCost[j] * clickMultiplier;
trainerBuffsCost[i] = trainerBuffsCost[j] * 1.25;
特别感谢:@ certainPeformance,@ Wais Kamal和@David我希望我能对它们全部进行绿色检查。但是,尽管如此,他们还是很有帮助的,谢谢大家!
答案 0 :(得分:2)
您的代码中有一个小错误。搜索此行代码。
clickBuffsCost[i] = clickBuffsCost[i] + (clickBuffsCost[j] * clickMultiplier);
更改为:
clickBuffsCost[i] = clickBuffsCost[j] + (clickBuffsCost[j] * clickMultiplier); // notice the difference after the = part
由于i
将从1开始,所以clickBuffsCost[1]
未定义,因为clickBuffsCost
开头仅包含一个项目。
答案 1 :(得分:1)
这是您出问题的地方:
for (i = 1; i <= 20; i++) {
var j = i - 1;
idleBuffsCost[i] += idleBuffsCost[j] * idleMultiplier;
clickBuffsCost[i] = clickBuffsCost[i] + (clickBuffsCost[j] * clickMultiplier);
trainerBuffsCost[i] += trainerBuffsCost[j] * 1.25;
}
首先,在使用前定义i
。定义变量是好的编程习惯。
clickBuffsCost[i] = clickBuffsCost[i] + (clickBuffsCost[j] * clickMultiplier);
在循环的第一次迭代中,i
的值为1,而j
的值为0。您正在将clickBuffsCost
的第二个元素设置为clickBuffsCost[i] + (clickBuffsCost[j] * clickMultiplier)
。 clickBuffsCost[i]
(在这种情况下等于clickBuffsCost[1]
)是未定义的,这就是为什么在调用console.log(clickBuffsCost[0])
时得到NaN的原因。
答案 2 :(得分:-4)
您需要初始化数组长度。例如,如果您知道数组中有20个元素,则应按以下方式初始化数组:
StringBuffer
。
或者,如果您不知道数组的长度,则可以使用数组const testArr = new Array(20);
函数,而不是为数组的ith元素建立索引并为其分配值,而不是使用它。此方法意味着您不必初始化具有长度的数组。
您可以在此处了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array