Itérer les propriétés d'un objet JavaScript à l'aide de jQuery

116

Existe-t-il un moyen jQuery d'effectuer une itération sur les membres d'un objet, comme dans:

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

Je n'aime tout simplement pas que cela forressorte de ma belle notation jQuery!

tags2k
la source

Réponses:

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

chaque

Tim Büthe
la source
De plus, je suppose que cette alerte nn'est pas tout à fait correcte. Au moins ça pourrait êtren.name
Eugene
2
@Eugene: Je ne comprends pas votre point. Chaque fonction prend un tableau ou un objet comme premier argument et une fonction comme second. Cette fonction est appelée pour chaque élément du tableau / chaque propriété de l'objet. Chaque fois que la fonction est appelée, elle obtient l'index et la valeur / le nom et la valeur passés en arguments. Dans mon exemple, les paramètres "n" sont les deux chaînes "John" et "JS". La propriété "nom" serait "indéfinie".
Tim Büthe
Oui. J'avais tort ici. D'une manière ou d'une autre, j'ai pensé que chaque propriété de l'objet est un autre objet avec par exemple un nom de propriété qui est une chaîne. Bien sûr, tout cela est faux. Désolé. :)
Eugene
4
chacun a beaucoup plus de fonctionnalités: thisest aussi n. return falsecasse la boucle de chaque ...
andy
56

Vous pouvez également utiliser eachpour les objets et pas seulement pour les tableaux:

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

Cette méthode parcourt les propriétés des objets et les écrit dans la console avec un retrait croissant:

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));
        }
    });
}

Passez-lui simplement l'objet que vous souhaitez parcourir:

var response = $.ajax({
    url: myurl,
    dataType: "json"
})
.done(function(a){
   console.log("Returned values:");
   enumerate(a);
})
.fail(function(){ console.log("request failed");});
Jonathanbruder
la source
Utilisation de ceci quand une valeur est nulle erreurs avec "Uncaught TypeError: Cannot read property 'length' of null"
JustinStolle
3

En retard, mais peut être fait en utilisant Object.keys comme,

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>

Rohan Kumar
la source