2010-11-24 3 views
5

私は、それぞれが配列を含む複数のオブジェクトを含むものを含め、いくつかの項目を含むオブジェクトを作成しました。これはどのように構造化されています。。アレイ上では動作しません。しかし、.isArrayはtrueを返しますか?

$.myVar = { 
    cp : "", 
    ps : { 
     m1 : ["001", "002", "003"], 
     m2 : ["002", "004"] 
    } 
}; 

スクリプトは、$ .myVar.ps ["m1"]にそれぞれメソッドがないとクラッシュし続けます。

調査のためにChromeのコンソールに入ったとき、私は以下を実行し、表示された出力を取得します。

$.myVar.ps["m1"] 
["001", "002", "003"] 
$.myVar.ps["m1"].each(function (i, p) {alert(i)}) 
TypeError: Object 001,002,003 has no method 'each' 

また、以下を実行すると、m1が配列であることが証明されます。

したがって、m1は配列ですが、そのように扱うことは拒否されます。私が間違っていることは何か考えていますか?

答えて

19

eachネイティブArray方法ではありません。これは、jQueryオブジェクトのメソッドです。つまり、$関数で作成されたオブジェクトです。場合は、

$.each($.myVar.ps.m1, function (i, el) { /* ... */ }); 

最も推奨ルート:(それは$(...)の配列をラップ不要なjQueryオブジェクトを作成するため、お勧めできません)あなたは

$($.myVar.ps.m1).each(function (i, el) { /* ... */ }); 

を行うことができますいずれか、またはあなただけ $.eachを使用することができますあなたは、近代的なブラウザ(IE> = 9)を使用して、または es5-shimを使用して、標準 Array.prototype.forEach方法を使用することですされています

$.myVar.ps.m1.forEach(function (el, i) { /* ... */ }); 

異なる引数の順序に注意してください(必要がない場合は、インデックスを外すことができるので、IMOをよくしてください)。

-2

それぞれがjavascriptの配列のメソッドではありません。 試し:

$($.myVar.ps["m1"]).each 
+2

1分17秒。素晴らしいありがとう! – McB

+0

無効なjQueryオブジェクトを作成しないでください。代わりに '$ .each()'を使用してください。 – ThiefMaster

7

.eachのみjQueryのオブジェクトのために定義されています。純粋なJavascript配列の場合、use the "static method" $.each

$.each($.myVar.ps["m1"], function(i,p) { alert(i); }); 
関連する問題