2012-04-14 7 views
1

何らかの理由でJSONオブジェクトを配列 "list"にプッシュすることができますが、その.lengthを呼び出すと、アイテム数ではなく文字数を取得しているようです。なぜarray.lengthはそのような高い数値を返しますか?

更新:解答を参照してください。私のスクリプトは文字のを返さず、指数関数的にループしていました。

$.getJSON('[omitted].php?callback=?',function(d,item){ 
    var list = [] 
    alert('Length: '+d.length) // d consists of 271 JSON objects, d.length = 271 
    for (i=0;i<d.length;i++){ 
     $.each(d,function(){ // for each JSON object we add... 
      list.push({'name':this.name,'href':this.href,'img':this.img}) 
     }) 
     if (i==d.length){ 
     alert('Completed - Length: '+list.length) // list.length = 44711. Why? 
     } 
    } 
}) 

私は警告使用することに注意してください(リスト)私は以下を参照してください

[object,Object][object,Object][object,Object] ... 

よりもむしろ配列:

[[object,Object][object,Object][object,Object] ... ] 
+0

[jsFiddle](http://jsfiddle.net)、どうぞ。 (配列として表示されないので、暗黙的な結合文字は '、'です。大括弧は追加されません) – Ryan

答えて

2

私はこれを信じて...

$.each(d,function(){ 

はこれです...

$.each(d[i],function(){ 

そうしないと、d内のすべてのアイテムに対して一度に同じd構造をループしています。

+0

コミュニティwiki?どうして? – Ryan

+0

@minitech:他の人は私のすべての間違いを訂正します。 ;) –

+0

ありがとう、すべての答えは非常に便利だった。できるだけ早くupvoteします。 – Trey

1
//Loop though d 
for (i=0;i<d.length;i++){ 
    //loop through d 
    $.each(d,function(){ // for each JSON object we add... 
     list.push({'name':this.name,'href':this.href,'img':this.img}) 
    }) 
    if (i==d.length){ 
    alert('Completed - Length: '+list.length) // list.length = 44711. Why? 
    } 
} 

問題が表示されますか?あなたは基本的にこれをやっている

var list = []; 
for (var i=0;i<d.length;i++){ 
    for (var j=0;j<d.length;j++){ 
     list.push({}); 
    } 
} 
+0

ありがとうございました。すべての回答はとても役に立ちました。できるだけ早くupvoteします。 – Trey

1

は見てみましょう、それぞれの文の基本構造を同じように

$.each(mixedVar, function(index, item) { 
    //Here index, is not an array but singular item's index, so whenever 
    // index.length will be applied it will be taken as a variables, that a list/collection/array 
}); 

、あなたのdもある、アイテムのインデックスを返します混合変数、リストも配列もありません。

+0

ありがとう、すべての答えは非常に便利だった。できるだけ早くupvoteします。 – Trey

関連する問題