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)
, но это не сработало. Должен ли я помещать его в цикл?
Ответы
Ответ 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);
}
}