Как уже упоминалось в многочисленных комментариях, вы не сортируете объект. Сортировка подразумевает порядок, подразумевает сбор, подразумевает структуру данных.
Итак, во-первых, вам нужен массив объектов. Поэтому извлеките их в массив, итерации по клавишам. Затем используйте Array.sort
с пользовательским компаратором.
var objectsToSort = {
"166":
{
"name":{"name":"name","val":"matt","order":""},
"props":{"name":"props","val":"1","order":""}
},
"147":
{
"name":{"name":"name","val":"chris","order":""},
"props":{"name":"props","val":"4","order":""}
}
}
var objects = Object.keys(objectsToSort).map(function (key) {
return objectsToSort[key];
});
objects.sort(function (a, b) {
return a.val - b.val;
});
Я заметил, что val
является строковым представлением числа. Если вы хотите цифровой вида, либо изменить их чистые числа или изменить функцию сортировки выше использовать parseInt
:
objects.sort(function (a, b) {
return parseInt(a.val, 10) - parseInt(b.val, 10);
});
Я предпочитаю, чтобы изменить фактические данные, чем функции, потому что синтаксический анализ будет выполняться два раза в сравнение и сортировка обычно N * log (n). Таким образом, он будет работать 2 (N * log (n)).
Это не массив ... –
У вас нет массива. Как вы хотите упорядочить этот объект, купите его свойства/ключи (166, 147)? Проверьте [это ответы] (http://stackoverflow.com/questions/5467129/sort-javascript-object-by-key) или [это] (http://stackoverflow.com/questions/1359761/sorting-a-javascript -объект-на-имя-свойства). – skobaljic
Это объект, а не массив. и вы НЕ имеете дело с Json, как это. json - формат транспортного кодирования. Вы расшифровываете это на нативную структуру (например, объект JS, массив PHP, blah blah blah), и вы сортируете THAT. Затем вы снова кодируете отсортированную структуру в json. –