Ітерація властивостей об’єкта JavaScript за допомогою jQuery


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
@Eugene: Я не розумію вашої точки зору. Кожна функція приймає масив або об'єкт як перший аргумент, а функцію - як другий. Ця функція стає calld для кожного елемента масиву / кожного властивості в об'єкті. Щоразу, коли функція викликається, вона отримує індекс і значення / ім'я та значення, передані як аргументи. У моєму прикладі параметром "n" є два рядки "John" та "JS". Властивість "name" було б "невизначено".
Тім Бют

Так. Я тут помилявся. Я якось подумав, що кожна властивість в об'єкті - це інший об'єкт, наприклад, ім'я властивості, яке є рядком. З увагою, все це неправильно. Вибачаюся. :)
Євген

4
кожен має набагато більше можливостей: thisє також n. return falseрозбиває кожну петлю ...
Енді

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

Використовуючи це, коли значення є нульовими помилками з "Uncaught TypeError: Неможливо прочитати властивість 'length' of 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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.