2012-04-14 2 views
0

объекта My JSon выглядит следующим образом:Сортировка свойств объекта

events:{ 
"2": { 
    "action": "some value", 
    "property": "some value" 
} 
"0": { 
    "action": "some value", 
    "property": "some value" 
} 
"1": { 
    "action": "some value", 
    "property": "some value" 
} 

} 

Мне нужно сортировать свойства объекта. Есть какой-либо способ сделать это? Результат должен быть таким:

events:{ 
"0": { 
    "action": "some value", 
    "property": "some value" 
} 
"1": { 
    "action": "some value", 
    "property": "some value" 
} 
"2": { 
    "action": "some value", 
    "property": "some value" 
} 

} 
+4

в объектах, [заказ не гарантируется] (http://stackoverflow.com/a/5525820/575527). вместо этого храните их в массивах. – Joseph

+2

@Joseph - Это должен быть ответ. :) – Quentin

+1

@Srikanth Kshatriy - Это объект буквальный, а не JSON. JSON - это формат сериализации данных. – Quentin

ответ

1

Чтобы гарантировать заказ, как сказал @ Джозеф, он должен быть в массиве:

var events = { 
    "2": { 
    "action": "some value", 
    "property": "some value" 
    }, 
    "0": { 
    "action": "some value", 
    "property": "some value" 
    }, 
    "1": { 
    "action": "some value", 
    "property": "some value" 
    } 
}; 

var eventOrder = []; 

for(var prop in events){ 
    if(events.hasOwnProperty(prop)){ 
    eventOrder.push(prop); 
    } 
} 

eventOrder.sort(); 

Примечание: это будет сортировать ALPHABETICAL, так как вы используете строки, поэтому, если у вас есть более 9 элементов, вы можете в итоге использовать eventOrder как ["1", "10", "2", ...]. Если это нежелательно, вы можете parseInt перед сохранением в массиве, а также силу, которую вы вводите позже, когда вы выполняете поиск.

+0

Это подходит для моего требования. Спасибо @webnesto –

+0

Нет необходимости «форсировать» строку позже, «alert (events [2])' будет работать нормально. – RobG

+0

@RobG - вы технически правы, но в этот момент вы полагаетесь на преобразование типа JS. Это то же самое, что использовать «==» для оценок, и если вы опуститесь на сторону «===» аргументов, вы также захотите убедиться, что используете строки для поиска хэша. – webnesto

1

в сочетании с моим комментарием, сохранить его таким образом, вместо этого: использовать массив, а затем сохранить эти показатели в качестве идентификаторов. то вы можете перемещать их, используя некоторый алгоритм сортировки. здесь»являются some samples of sorting algorithms вы можете посмотреть

events:[ 
    { 
     "id" : 2, 
     "action": "some value", 
     "property": "some value" 
    }, 
    { 
     "id" : 0, 
     "action": "some value", 
     "property": "some value" 
    }, 
    { 
     "id" : 1, 
     "action": "some value", 
     "property": "some value" 
    } 
] 
+0

Обычно я предпочитаю хранить порядок и данные в виде отдельных элементов - {events: {"foo": {"id": "foo", ...}}, eventOrder: ["foo", ...]} – webnesto

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