Iterando las propiedades de un objeto JavaScript usando jQuery


116

¿Existe una forma jQuery de realizar iteraciones sobre los miembros de un objeto, como en:

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

¡Simplemente no me gusta que esto forsobresalga de mi encantadora notación jQuery!

Respuestas:


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

cada


También supongo que la alerta nno es del todo correcta. Al menos podría sern.name
Eugene

2
@Eugene: No entiendo tu punto. Cada función toma una matriz u objeto como primer argumento y una función como segundo. Esta función se llama para cada elemento de la matriz / cada propiedad del objeto. Cada vez que se llama a la función, obtiene el índice y el valor / nombre y el valor pasados ​​como argumentos. En mi ejemplo, el parámetro "n" son las dos cadenas "John" y "JS". La propiedad "nombre" sería "indefinida".
Tim Büthe

Sí. Me equivoqué aquí. De alguna manera pensé que cada propiedad en el objeto es otro objeto con, por ejemplo, el nombre de la propiedad, que es una cadena. Por supuesto, todo eso está mal. Lo siento mucho. :)
Eugene

4
cada uno tiene muchas más características: thises también n. return falserompe cada bucle ...
Andy

56

También puede usar eachpara objetos y no solo para matrices:

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

9

Este método recorrerá las propiedades del objeto y las escribirá en la consola con sangría creciente:

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

Simplemente páselo por el objeto que desea iterar:

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

Usar esto cuando un valor es nulo errores con "Error de tipo no detectado: no se puede leer la propiedad 'longitud' de nulo"
JustinStolle

3

Tarde, pero se puede hacer usando Object.keys como,

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>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.