Проблема с JSON - PullRequest
       8

Проблема с JSON

3 голосов
/ 25 августа 2010
var obj = {
'51' : { 'name':'name1'},     
'66' : { 'name':'name2'},     
'58' : { 'name':'name3'}
};
$(function() {
    s = '';
    $.each(obj, function(k, v) {
        s += ' '+k;
    });
    alert(s);
});

В IE и Firefox это 51 66 58, а в Opera и Chrome - 51 58 66 Почему Jquery.each () сортирует по ключу в опере, хром? Что я могу сделать, чтобы сохранить родной порядок?

p.s, если ключи массива - строка, результат 51j 66j 58j возможно, опера и хром пытаются конвертировать ключи в целое число, где это возможно

var obj = {
"51j" : { "name":"name1"},    
"66j" : { "name":"name2"},    
"58j" : { "name":"name3"}
};

1 Ответ

9 голосов
/ 25 августа 2010

Объекты JavaScript не упорядочены. Нет никакой гарантии, в каком порядке должны появляться ключи, когда вы их зацикливаете, и движки JS могут свободно внедрять любые системы хранения и поиска, которые им нравятся.

Если порядок имеет значение, используйте массив: []

Может содержать объекты:

[
    { 'foo' : '1234', 'bar' : '5678' },
    { 'foo' : 'abcd', 'bar' : 'qwer' },
    { 'foo' : 'ldng', 'bar' : 'plma' }
]
...