我收到错误:object 0 has no method 'push'
,我无法弄清楚原因。
我知道sack[i]
是对象,i
为0,quantity_to_spawn
等于1.
我认为该节点存在推送问题,因为sack是一个数组而sack[i]
实际上是一个对象。
for (i=0;i<rows[r].quantity_to_spawn;i++){
more_drops = Math.random()
sack[i]=new Array();
for (;more_drops > .05;){
more_drops = Math.random()
rarity = Math.random()
if (rarity <= .75&&typeof rows[r].common=="string"){//common drop 75%
item=rows[r].common.split(",")
sack[i].push(parseInt(item[parseInt(Math.random()*item.length)]))
...
答案 0 :(得分:1)
我确定你错过了将变量sack
声明为数组
var sack = new Array();
或
var sack = [];
否则它应该起作用
以下是simple demo
我对这个问题做了一些实验,发现了一些有趣的事实。那些是,
问题是sack
已经分配了类似var sack = 'someValue';
的内容。在这种情况下(赋值字符串类型),这导致sack
成为字符串数组。因此,作业sack[i]=new Array();
毫无意义。 sack[0]
将为s
。并试图将一些值推到这将引发错误object 0 has no method 'push'
另一种情况(指定值编号类型),分配类似于var sack = 28892;
。在这种情况下,相同的数组赋值没有意义。但是,如果您尝试将某些内容推送到sack[0]
,那么它会抛出Cannot call method 'push' of undefined
,因为sack[0]
是undefined
。
在这两种情况下,在将sack
声明为某个值后,该分配不会产生任何错误,尽管它没用。
有关数组声明的其他信息,
答案 1 :(得分:0)
不知道你在这做什么,但试试这个:
var sack = [];
for (var i=0;i<rows[r].quantity_to_spawn;i++) {
var more_drops = Math.random();
sack[i] = [];
for (;more_drops > 0.05;) {
more_drops = Math.random();
var rarity = Math.random();
if (rarity <= 0.75&&typeof rows[r].common==="string") {//common drop 75%
var item = rows[r].common.split(",");
sack[i].push(parseInt(item[parseInt(Math.random()*item.length,10)],10));
...