обратен 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() е метод Array - и имате обекти. Освен това искате да създадете друг масив, но това, което имате, не са масиви, а обикновени обекти.   -  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, когато се използва delete върху свойство, се получава известно объркващо поведение, което не позволява на други браузъри да използват прости обекти като обектни литерали като подредени асоциативни масиви. В Explorer, докато стойността на свойството наистина е зададена на undefined, ако по-късно се добави обратно свойство със същото име, свойството ще бъде итерирано в старата си позиция - не в края на последователността на итерация, както може да се очаква след като изтри собствеността и след това я добави обратно.

Така че, ако искате да симулирате подреден асоциативен масив в среда с различни браузъри, вие сте принудени или да използвате два отделни масива (един за ключовете, а другият за стойностите), или да изградите масив от обекти с едно свойство и т.н. .

person Adam Lassek    schedule 28.11.2010
comment
@Ignacio, това не е въпрос за 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