2015-08-04 5 views
0

У меня есть простой JSON объект "Obj", как этот

var obj = {"a" : "x", "b" : "y", "c" : "z"} 

Я итерацию через этот объект, используя следующий код:

$.each(obj, function(index, element) { 
    console.log("Now I'm at index " + index); 
}); 

Это, конечно, производит серию:

Сейчас я на индексировать
Сейчас я в индексном б
Сейчас я в индексном с

Но то, что я хотел бы видеть это:

Теперь я по индексу 0
Сейчас я нахожусь в индексе 1
сейчас Я по индексу 2

Но я не могу понять, как это сделать без необходимости использовать какой-либо дополнительной переменной, я должен быть т o прирост в этом цикле.

Спасибо заранее,

+0

Что случилось бы с использованием дополнительной переменной счетчика? –

+1

Благодарим вас за внимание к неправильному ответу, который пытается применить 'Object.keys()' к строке JSON *. Шесть upvotes пока никто не думал, чтобы проверить этот код. –

+0

Вы не можете. Порядок объекта не гарантируется, но порядок массива. Поэтому у вас нет индекса при итерации объекта, так как вы не сможете извлекать данные из объекта с ним. Однако с массивом вы сможете. –

ответ

2

Взято из 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

Смежные вопросы