обратный json javascript

Есть ли недорогой способ реверса:

{
    "10": "..."
    "11": "...",
    "12": "...",
    "13": "...",
    "14": "...",
}

так что я получаю:

{
    "14": "...",
    "13": "...",
    "12": "..."
    "11": "...",
    "10": "...",
}

reverse() не работает с объектами json. Единственный способ, который я могу придумать, - это перебрать все элементы и создать массив. чувствует, что должен быть лучший способ.

Редактировать: спасибо за помощь ОБНОВЛЕНИЕ:

Как насчет того, если каждый ключ имеет хронологические данные. Когда я использую $.each для объекта, он проходит через объекты сверху вниз, я не понимал, что это ненадежно.

Вот что я пытаюсь сделать:

$.each(object, function (key, value) {
  function foo (key, value);
});

Я не хочу запускать foo для всех, кроме последних 3 пар, то есть я хочу использовать только последние 3 пары. Я подумал, что если я смогу изменить их, я могу просто запустить первые три и остановиться.

Есть ли способ, которым я могу просто сделать последние 3? Если последние 3 порядка ненадежны, есть ли более безопасный способ получить последние 3. Последние 3 будут иметь самые большие цифровые клавиши.

Спасибо.

Редактировать 2: я в основном решаю, наконец, выполнить манипуляции на стороне сервера. Я реорганизую свою базу данных, чтобы соответствующие вложенные документы теперь были заполнены документами, которые можно было бы запросить с помощью mongodb. Спасибо.


person Mark    schedule 28.11.2010    source источник
comment
Я действительно должен спросить, чего вы пытаетесь достичь, делая это. Большинству языков с парсером JSON все равно, в каком порядке находятся пары.   -  person Ignacio Vazquez-Abrams    schedule 29.11.2010
comment
@Mark reverse() - это метод массива, и вы получили объекты. Кроме того, вы хотите создать еще один массив, но вы получили не массивы, а простые объекты.   -  person Šime Vidas    schedule 29.11.2010
comment
@Mark Я думаю, что оба фрагмента кода будут создавать объекты с одинаковыми характеристиками. После оценки литералов объекта информация о порядке свойств в литерале теряется.   -  person Šime Vidas    schedule 29.11.2010
comment
@Šime Vidas, спасибо, я обновил вопрос. @Ignacio Vazquez-Abrams, спасибо.   -  person Mark    schedule 29.11.2010
comment
Порядок никогда не гарантируется в объектах JSON. Я вообще не понимаю, зачем тебе это. Независимо от того, в каком порядке находятся свойства, вы все равно будете обращаться к элементам одним и тем же способом. По их key имени.   -  person Alex    schedule 29.11.2010
comment
@Alex Алекс, я обновил вопрос, чтобы объяснить, что я хочу сделать. Похоже, я не правильно задал вопрос.   -  person Mark    schedule 29.11.2010
comment
@Mark Я так понимаю, вы не можете контролировать вывод JSON, так как было бы лучше просто отправить последние три.   -  person Orbling    schedule 29.11.2010
comment
@Mark Если ваши ключи числовые, вам следует просто использовать массивы, а не объекты. Если вы используете массивы, вы можете легко получить последние 3 элемента, вычислив их с помощью свойства length.   -  person Šime Vidas    schedule 29.11.2010
comment
@Šime Vidas, это json, который я получаю с сервера. Я не думаю, что есть какой-либо способ получить массивы. @orbling ааа, это мой сервер. думаю, я спрошу об этом в другом вопросе.   -  person Mark    schedule 29.11.2010
comment
@Mark Конечно, вы можете: { [ 1, 2, 3 ] } - вы просто помещаете массив внутрь объекта.   -  person Šime Vidas    schedule 29.11.2010
comment
@Šime Vidas Я не понимаю, что мне делать? Пожалуйста, напишите ответ, используя мой пример.   -  person Mark    schedule 29.11.2010
comment
@Mark Да, это не сработает, поскольку объекту нужна пара ключ-значение. Но это работает: ...................... { "arr": [ 1, 2, 3 ] }. Вы просто определяете объект с одним ключом, значением которого является нужный вам массив.   -  person Šime Vidas    schedule 29.11.2010
comment
@Šime Vidas, вы говорите, что я должен сделать это на стороне сервера перед отправкой? Иначе я не понимаю, как это будет работать.   -  person Mark    schedule 29.11.2010
comment
@Mark Да, я говорю о данных JSON, которые извлекаются с сервера. Как вы генерируете строку JSON на сервере? Или это статично?   -  person Šime Vidas    schedule 29.11.2010
comment
@Šime Vidas это из mongodb. я беру документ, и этот объект - это документ и его вложенные документы.   -  person Mark    schedule 29.11.2010


Ответы (4)


Ассоциативные массивы Javascript неупорядочены. Вы не можете зависеть от свойств, находящихся в каком-либо конкретном порядке.

Из Mozilla Developer Network:

Хотя ECMAScript делает порядок итерации объектов зависимым от реализации, может показаться, что все основные браузеры поддерживают порядок итерации, основанный на первом добавленном свойстве (по крайней мере, для свойств, не включенных в прототип). Однако в случае Internet Explorer, когда кто-то использует удаление свойства, возникает некоторое запутанное поведение, не позволяющее другим браузерам использовать простые объекты, такие как литералы объектов, в качестве упорядоченных ассоциативных массивов. В проводнике, несмотря на то, что значение свойства действительно установлено в значение undefined, если позднее добавить обратно свойство с тем же именем, это свойство будет повторяться в своей старой позиции, а не в конце последовательности итераций, как можно было бы ожидать после удалил свойство, а затем добавил его обратно.

Поэтому, если вы хотите имитировать упорядоченный ассоциативный массив в кросс-браузерной среде, вы вынуждены либо использовать два отдельных массива (один для ключей, а другой для значений), либо создавать массив объектов с одним свойством и т. д. .

person Adam Lassek    schedule 28.11.2010
comment
@ Игнасио, это не вопрос PHP. - person Adam Lassek; 29.11.2010
comment
@Ignacio Он говорил об объектах JavaScript. - person Šime Vidas; 29.11.2010
comment
Это связано с тем, что ассоциативные массивы Javascript на самом деле являются объектами со свойствами, а не фактическими массивами. - person Orbling; 29.11.2010
comment
Проблема только с IE? Довольно круто. Это очень полезно знать, так как на самом деле я не занимаюсь такими перемещениями с клиентом. - person Mark; 29.11.2010
comment
Эта цитата уже не совсем верна. И Chrome, и Opera (начиная с 10.50) упорядочивают свойства, имена которых представляют собой 32-битные целые числа без знака перед всеми остальными (которые затем появляются в порядке вставки). - person gsnedders; 29.11.2010

Используйте это для массивов объектов json

jsonObjectArray.reverse();
$.each(jsonObjectArray, function(i, item) {
    //do something with the item
});

Надеюсь это поможет

person Rasheed    schedule 21.05.2013

Это может помочь. Получите все ключи от объектов json в массив, который вы можете отсортировать.

var a = { 1 : 'x', 3 : 'y', 2 : 'z' };
var keys = []
for (i in a) { keys.push(i); }
keys.sort();

затем вы можете использовать reverse() и slice(), чтобы просто перебирать нужные вам ключи.

$.each(keys, function(idx, key) { 
  // do whatever with a[key]
}); 
person zoli    schedule 29.11.2010

Следуйте json в обратном порядке,

for(json.length;i>=0;i--)
{
    console.log(json.[i]);
}
person Calete    schedule 15.05.2012