Javascript错误'没有方法推送'

时间:2012-08-15 04:28:36

标签: javascript node.js

我收到错误: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)]))
                  ...

2 个答案:

答案 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声明为某个值后,该分配不会产生任何错误,尽管它没用。

有关数组声明的其他信息,

Javascript array declaration: new Array(), new Array(3), ['a', 'b', 'c'] create arrays that behave differently

答案 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));
         ...