Взято из this SO ответ:
Если порядок объектов имеет важное значение, вы должны пересмотреть вашу JSON схему для хранения объектов в массиве:
Как указывает Бен Алперт, свойства объектов Javascript неупорядочены, а ваш код поврежден, если вы ожидаете, что они будут перечислены в том же порядке, в котором они указаны в объектном литерале, - нет свойства «first».
Объекты не упорядочены, не ждите их.
EDIT: Я заметил, что вы не хотите использовать переменную для увеличения. Итак, вот еще одно решение.
Храните ваши объекты в массиве, а затем проведите через этот массив.
var arrayOfObjects = [
{"a" : "x"},
{"b" : "y"},
{"c" : "z"}
]
$.each(arrayOfObjects, function(index, object){
console.log('index', index);
console.log('object', object);
})
Обратите внимание, что я немного изменил arrayOfObjects
.
Это будет производить:
index 0
object Object {a: "x"}
index 1
object Object {b: "y"}
index 2
object Object {c: "z"}
оригинальный ответ (В случае, если это полезно кому-либо еще):
Вы должны просто использовать переменную в функции.
var index = 0;
$.each(obj, function(key, value) {
console.log("Now I'm at index " + index);
index++;
});
Обратите внимание, как я использую (key,value)
теперь вместо (индекс, элемент). На each documentation JQuery в упоминают:
Если объект используется в качестве сбора, обратный вызов передается пара ключ-значение каждый раз, когда:
var obj = {
"flammable": "inflammable",
"duh": "no duh"
};
$.each(obj, function(key, value) {
alert(key + ": " + value);
});
Еще раз, это производит два сообщения:
воспламеняется горючий
Дух: п o duh
Что случилось бы с использованием дополнительной переменной счетчика? –
Благодарим вас за внимание к неправильному ответу, который пытается применить 'Object.keys()' к строке JSON *. Шесть upvotes пока никто не думал, чтобы проверить этот код. –
Вы не можете. Порядок объекта не гарантируется, но порядок массива. Поэтому у вас нет индекса при итерации объекта, так как вы не сможете извлекать данные из объекта с ним. Однако с массивом вы сможете. –