2009-02-25 10 views
89

Prototype JavaScriptフレームワークを使用してオブジェクトのすべてのプロパティを反復処理する方法はありますか?ここでPrototypeを使用してJavaScriptのオブジェクトのすべてのプロパティを反復処理しますか?

状況です:私は、変数responseにしているJSONレスポンスを評価する場合、私はそれぞれを反復処理することができるようにしたい

{foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}} 

:私はこのようになりますJSONでのAJAXの応答を取得していますどのインデックスが真で、どのインデックスが偽であるかを調べるには、response.barobjオブジェクトのプロパティを使用します。

プロトタイプはObject.keys()Object.values()の両方を持っていますが、奇妙なことに単純なObject.each()機能がないようです!私はObject.keys()とObject.values()の結果を受け取り、他のオブジェクトを相互参照することができますが、これは適切な方法であると確信しています。

答えて

42

最初convert your object literal to a Prototype Hashにあります。ここではプロトタイプの必要はありません

// Store your object literal 
var obj = {foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}} 

// Iterate like so. The $H() construct creates a prototype-extended Hash. 
$H(obj).each(function(pair){ 
    alert(pair.key); 
    alert(pair.value); 
}); 
+0

パーフェクト!これはまさに私が探していたものです。 – OverloadUT

+57

残念ながら、Prototypeのない単純なjavascriptオブジェクトを反復するだけの似たような質問が残っていたので、私は今この答えを "複製"によって閉じられた質問と同じように扱わなければなりません。 ひどい例では、ユーザーにPrototypeを読み込ませるためです。ユーザーはPrototypeについて何も言わなかったので、不要なライブラリを読み込むように強制するのは便利ではありません。 (これを本当に重複しているかのように扱うことを忘れないでください)。 重複の虚偽の主張のために他の質問が終了していない場合、私は答えに投票する必要はありません。 –

+2

AskerがPrototypeを望んでいると言いましたか(または編集された質問ですか?)とにかくそれはすべての良いです – emurano

0

キーを繰り返して、大括弧で値を取得する必要があります。

参照:How do I enumerate the properties of a javascript object?

EDIT:明らか、これは質問の重複になります。

+0

強くプロトタイプのドキュメントにに対して推奨されてその方法: http://www.prototypejs.org/api/array – OverloadUT

+1

また、私が持っているプロトタイプのネイティブソリューションを探していたので、これは重複しているとは思わない。もう1つの質問は、フレームワークを使用したくない人にとってまともですが、このソリューションはPrototypeを使用している方がはるかに安全です。 – OverloadUT

+1

@OverloadUT:十分注意深く読んでいない:配列のプロパティを反復することは避けてください。普通のオブジェクトではありません。 – Christoph

546

:JavaScriptがfor..inループを持っています。あなたは誰がObject.prototypeで台無しないことをわからない場合は、同様hasOwnProperty()をチェック、すなわち

for(var prop in obj) { 
    if(obj.hasOwnProperty(prop)) 
     doSomethingWith(obj[prop]); 
} 
+139

不要なライブラリを読み込まなくても、実際の答えをありがとうございます。 –

+8

これは厳格な答えではありません。プロトタイプを使用する必要があるとの質問があります。選択の自由 - ハハ... –

+11

+1質問のタイトルへの正しい答えです。 –