jQueryを使用したJavaScriptオブジェクトのプロパティの反復


116

次のように、オブジェクトのメンバーに対して反復を実行するjQueryの方法はありますか?

    for (var member in obj) {
        ...
    }

for私の素敵なjQuery表記の中からこれが出てくるのが気に入らないだけです!

回答:


210
$.each( { name: "John", lang: "JS" }, function(i, n){
    alert( "Name: " + i + ", Value: " + n );
});


また、私は、その警告nが完全に正しくないことを推測します。少なくとも可能性はありますn.name
ユージーン

2
@ユージーン:私はあなたの要点を理解していません。each関数は、配列またはオブジェクトを最初の引数として受け取り、関数を2番目の引数として受け取ります。この関数は、配列のすべての要素/オブジェクトのすべてのプロパティに対して呼び出されます。関数が呼び出されるたびに、引数として渡されたインデックスと値/名前と値が取得されます。私の例では、パラメータ「n」は「John」と「JS」の2つの文字列です。「name」プロパティは「undefined」になります。
TimBüthe、2011年

うん。私はここで間違っていました。どういうわけか、オブジェクトのすべてのプロパティは、たとえば文字列であるプロパティ名を持つ別のオブジェクトであると思いました。もちろん、それはすべて間違っています。すみません。:)
ユージーン

4
それぞれが非常に多くの機能を持っている:thisもありますnreturn false各ループを中断します...
andy

56

each配列だけでなく、オブジェクトにも使用できます。

var obj = {
    foo: "bar",
    baz: "quux"
};
jQuery.each(obj, function(name, value) {
    alert(name + ": " + value);
});

9

このメソッドは、オブジェクトのプロパティをウォークスルーし、インデントを増やしながらコンソールに書き込みます。

function enumerate(o,s){

    //if s isn't defined, set it to an empty string
    s = typeof s !== 'undefined' ? s : "";

    //iterate across o, passing keys as k and values as v
    $.each(o, function(k,v){

        //if v has nested depth
        if(typeof v == "object"){

            //write the key to the console
            console.log(s+k+": ");

            //recursively call enumerate on the nested properties
            enumerate(v,s+"  ");

        } else {

            //log the key & value
            console.log(s+k+": "+String(v));
        }
    });
}

繰り返し処理したいオブジェクトを渡すだけです:

var response = $.ajax({
    url: myurl,
    dataType: "json"
})
.done(function(a){
   console.log("Returned values:");
   enumerate(a);
})
.fail(function(){ console.log("request failed");});

値がnullのときにこれを使用すると、「Uncaught TypeError:プロパティの「length」のnullを読み取れません」
JustinStolle

3

遅いですが、次のようなObject.keysを使用して実行できます。

var a={key1:'value1',key2:'value2',key3:'value3',key4:'value4'},
  ulkeys=document.getElementById('object-keys'),str='';
var keys = Object.keys(a);
for(i=0,l=keys.length;i<l;i++){
   str+= '<li>'+keys[i]+' : '+a[keys[i]]+'</li>';
}
ulkeys.innerHTML=str;
<ul id="object-keys"></ul>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.