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!

Réponses:


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

chaque


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

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

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>

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.