2014-11-19 2 views
0

Я пытаюсь сортировать json ниже, но до сих пор не смог найти способ. Я получаю этот json jQuery ajax с datatype json. Как я могу применить сортировку к этому, сохраняя индекс? Каждый раз, когда я пытаюсь сортировать javascript, выдается сообщение об ошибке, которое не определено, не является функцией. Я уже знаю, что json или объекты не имеют сортировки.Сортировка индекса сохранения json

Итак, как я могу это достичь? Мне действительно нужно сохранить этот индекс.

{ 
    "header": { 
     "user": "1059", 
     "authenticated": true, 
     "isGuest": false, 
     "time": 1416362117 
    }, 
    "batches": { 
     "3503": { // Preserve this index 
      "user": "1059", 
      "auction": "1826", 
      "number": "1", 
      "published": "1", 
      "type": "1", 
      "status": "1", 
      "date_start": "1415379600", 
      "date_end": "1417021200", // Sort by this value 
     }, 
     "3583": { 
      "user": "1059", 
      "auction": "1886", 
      "auto_value": "0.00", 
      "number": "1", 
      "published": "1", 
      "type": "1", 
      "status": "1", 
      "date_start": "1415376000", 
      "date_end": "1417017600", 
     }, 
    } 
} 
+0

http://stackoverflow.com/questions/1069666/sorting-javascript-object-by-property-value – Cheery

+0

Просто добавьте основную идею ссылки выше. Объекты JavaScript по определению неупорядочены (см. Спецификацию языка ECMAScript , раздел 8.6). Спецификация языка даже не гарантирует, что если вы повторяете свойства объекта дважды подряд, они выйдут в том же порядке во второй раз. – Cheery

+0

Извините @Cheery, что ответ мне не помогает. – thiagovidal

ответ

0

Как я писал и процитировал в комментариях - в свойствах нет порядка. Создайте массив объектов с одним свойством, которые вы можете сортировать. Что-то вроде этого:

var data = { 
    "header": { 
     "user": "1059", 
     "authenticated": true, 
     "isGuest": false, 
     "time": 1416362117 
    }, 
    "batches": [ // this is an array of objects, not a single object 
     {"3503": { // Preserve this index 
      "user": "1059", 
      "auction": "1826", 
      "number": "1", 
      "published": "1", 
      "type": "1", 
      "status": "1", 
      "date_start": "1415379600", 
      "date_end": "1417021200", // Sort by this value 
     }}, 
     {"3583": { 
      "user": "1059", 
      "auction": "1886", 
      "auto_value": "0.00", 
      "number": "1", 
      "published": "1", 
      "type": "1", 
      "status": "1", 
      "date_start": "1415376000", 
      "date_end": "1417017600", 
     }} 
    ] // end of array 
} 

data.batches.sort(function(a, b) { 
    return a[Object.keys(a)[0]].date_end - b[Object.keys(b)[0]].date_end; 
}); 

console.log(data.batches); 

И вы можете сохранить эти цифры внутри объекта, содержащего user, auction и так далее для более легкого доступа.

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