Подтвердить что ты не робот

Jquery $.each() для объектов

<script>
    $(document).ready(function() {
        var data = { "programs": [ { "name":"zonealarm", "price":"500" }, { "name":"kaspersky", "price":"200" } ] };
        $.each(data.programs[0], function(key,val) {
            alert(key+val);
        });
    });
</script>

Этот код извлекает первые данные. name:zonealarm и price:500. Как я могу получить все данные в объекте? Я попробовал $.each(data.programs, function(key,val), но это не сработало. Должен ли я помещать его в цикл?

4b9b3361

Ответ 1

$.each() работает для объектов и массивов:

var data = { "programs": [ { "name":"zonealarm", "price":"500" }, { "name":"kaspersky", "price":"200" } ] };

$.each(data.programs, function (i) {
    $.each(data.programs[i], function (key, val) {
        alert(key + val);
    });
});

... и поскольку вы получите текущий элемент массива в качестве второго аргумента:

$.each(data.programs, function (i, currProgram) {
    $.each(currProgram, function (key, val) {
        alert(key + val);
    });
});

Ответ 2

Вы действительно передаете первый элемент данных каждой функции.

Передать data.programs для каждой функции. Измените код следующим образом:

<script>     
    $(document).ready(function() {         
        var data = { "programs": [ { "name":"zonealarm", "price":"500" }, { "name":"kaspersky", "price":"200" } ] };         
        $.each(data.programs, function(key,val) {             
            alert(key+val);         
        });     
    }); 
</script> 

Ответ 3

В принципе, вам нужно сделать две петли. Тот, который вы делаете уже, выполняет итерацию каждого элемента в элементе 0-го массива.

У вас есть программы: [{...}, {...}] поэтому программы [0]: { "name": "zonealarm", "price": "500" } Таким образом, ваша петля просто перешла к этому.

Вы можете сделать внешний цикл над массивом

$.each(data.programs, function(index) {

    // then loop over the object elements
    $.each(data.programs[index], function(key, value) {
        console.log(key + ": " + value);
    }

}