0

我收到错误:object 0 has no method 'push',我不知道为什么。

我知道那sack[i]是对象,i是 0quantity_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)]))
                  ...
4

2 回答 2

1

我确定您缺少将变量声明sack为数组,

var sack = new Array();

或者

var sack = [];

否则它应该工作

这是简单的演示

我对这个问题做了一些实验,发现了一些有趣的事实。那些是,

问题是sack已经分配了类似var sack = 'someValue';. 在这种情况下 (assigned value string type),这导致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了某个值之后,赋值都没有产生任何错误,尽管它是无用的。

关于数组声明的附加信息,

Javascript 数组声明:new Array(), new Array(3), ['a', 'b', 'c'] 创建行为不同的数组

于 2012-08-15T05:19:19.940 回答
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));
         ... 
于 2012-08-15T05:40:07.507 回答