0

エラー: が表示object 0 has no method 'push'されますが、その理由がわかりません。

私はそれsack[i]がオブジェクトでiあり、0であり、quantity_to_spawn1に等しいことを知っています.

sack[i]sack は配列であり、実際にはオブジェクトであるため、ノードのプッシュに問題があると思います。

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';この場合 (割り当てられた値の文字列型)、これsackは文字列配列になります。したがって、割り当てsack[i]=new Array();は意味がありません。sack[0]となりますs。これに何らかの値をプッシュしようとすると、エラーがスローされますobject 0 has no method 'push'

別のケース(割り当てられた値の数値型)、割り当ては次のようになりvar sack = 28892;ます。この場合、同じ配列の割り当ては意味がありません。しかし、何かをプッシュしようとするとsack[0]、 がスローされるためCannot call method 'push' of undefinedsack[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 に答える