#javascript #jquery
#javascript #jquery
Вопрос:
У меня есть следующий объект:
var objectVar = {
4 : { "key" : "key-name4", "item4" : {} },
3 : { "key" : "key-name3", "item3" : {} }
}
Затем я пытаюсь выполнить следующее:
$(objectVar).each(function(index,record){
console.log(record); // Loops Only Once and Logs Full Object
});
Кто-нибудь может мне помочь, почему $.each();
функция выполняет итерацию по вложенным объектам внутри основного объекта?
Любая помощь будет оценена!
Ответ №1:
«Кто-нибудь может мне помочь, почему функция $.each(); выполняет итерацию по вложенным объектам внутри основного объекта?»
Для зацикливания вложенных объектов вам нужны вложенные циклы.
Хотя использование метода each()
[docs], подобного вашему, обычно иногда работает (как сейчас), он действительно предназначен для элементов DOM.
Вместо этого используйте метод jQuery.each()
[docs]:
$.each( objectVar, function(index,record){
console.log(record);
// start a loop on the current record in the iteration
$.each( record, function( index2, sub_record ) {
console.log( index2, sub_record );
});
});
Теперь ваш цикл будет расширен до первого уровня вложенных объектов.
Если вы не уверены в общей структуре и хотите перечислить всю глубину, вам нужно будет проверить каждое встречающееся значение, чтобы определить, следует ли его перечислять.
Комментарии:
1. Спасибо за отличное объяснение! Я знаю, что это выходит за рамки OP, но знаете ли вы, есть ли способ заставить функцию each() анализировать в порядке пронумерованных ключей вместо порядка, в котором записи отображаются внутри объекта?
2. @dSquared: Нет, на самом деле нет никакого способа сделать это с объектом. Единственный способ — определить массив, который описывает желаемый порядок, затем выполнить итерацию массива и извлечь связанный элемент из объекта. Итак, если у вашего объекта есть ключи
7,3,9,4
, вы можете создать массивarr=[3,4,7,9]
для определения порядка, затем выполнить итерацию массива и выполнитьobjectVar[ arr[i] ]
. Но это становится немного сложнее.3. …чтобы получить последовательный порядок цифровых клавиш, вам действительно следует использовать массив в первую очередь.
Ответ №2:
Вы должны использовать метод $.each вместо .каждый метод:
$.each(objectVar, function(index, record) {
console.log(record);
});
Ответ №3:
$.each(objectVar,function(index,record){
console.log(record);
});
Ответ №4:
Хотя jQuery великолепен, вы на самом деле его не используете. Цикл JavaScript по объектам довольно прост, как есть:
var record;
for(var key in objectVar) {
record = objectVar[key];
}
Ответ №5:
Вы неправильно используете $.each()
для объектов, отличных от jQuery:
$.each( objectVar, function( index, record ){
console.log( record );
});