2010-11-28 7 views
5

Есть недорогой способ изменить:обратный JavaScript формата JSON

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

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

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

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

Edit: спасибо за помощь UPDATE:

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

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

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

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

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

Спасибо.

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

+2

Я действительно есть вопрос, что вы пытаетесь для этого. Большинство языков, на которых есть парсер JSON, не заботятся о том, в каком порядке находятся пары. – 2010-11-28 23:46:10

+2

@Mark reverse() - метод массива - и у вас есть объекты. Кроме того, вы хотите создать «другой массив», но то, что вы получили, это не массивы, а простые объекты. – 2010-11-28 23:46:47

+0

@Mark Я думаю, что оба фрагмента кода создадут объекты с теми же характеристиками. Как только литералы объекта оцениваются, информация о порядке свойств в литерале теряется. – 2010-11-28 23:52:11

ответ

8

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

С Mozilla Developer Network:

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

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

1

Это может помочь. Получите все ключи от объектов 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] 
}); 
1

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

for(json.length;i>=0;i--) 
{ 
    console.log(json.[i]); 
} 
3

Используйте это на объекты JSON массивы

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

Надеется, что это помогает

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