2016-09-08 3 views
0

я извлекаемых данных из MongoDB и послал его стороне клиента, JSON возвращается структурирована следующим образом:Сортировка JSON объект данных объектов по значению объекта

{ "0" : { "_id" : { "$oid" : "57d129bfaa1a7567d9d" }, "id" : "155edc1698efc18e", "history_id" : "41752", "messages" : [ { "id" : "155edc1698efc18e", "snippet" : "Mari567567rnar | IT U756567ive travel experience T: +35667575756756| T: +7567560 F: +3567756792 | E: ad75675travel.com Ulix doo | Miramarsk765657 HR–105675 Zagreb ----------", "labels" : [ "INBOX", "IMPORTANT", "CATEGORY_PERSONAL", "Label_15", "Label_7" ], "date" : "1468572702000", "history_id" : "41752", 

Я проанализирован его с помощью var objects = JSON.parse(response);

При входе он, это выглядит следующим образом:

enter image description here

это в основном объект объектов. Он действует как массив, но это не массив, и я не могу использовать методы массива, такие как sort.

Вот как выглядят мои внутренние объекты.

{_id:object, history_id:string, id:string, messages:array} 

Я собираюсь преобразовать значение history_id в int и отсортировать эти объекты по этому значению.

Я ищу лучший способ сортировки этих объектов по этому значению. Я пошел с методом .sort, но это метод массива, и он не определен для типа объекта. Я бы преобразовал главный объект в массив и вызвал этот метод. Или, если есть способ сортировать эти объекты более элегантным способом, не преобразовывая его в массив. Какой метод более практичен и как его правильно реализовать?

+2

Преобразование вашего объекта в массив. Объекты не имеют порядка и не могут быть отсортированы, поэтому в любом случае это необходимый шаг. – deceze

+0

@deceze Вы бы рекомендовали наиболее практичный метод преобразования этого объекта в правильный сортируемый массив? – Kunok

+1

http://stackoverflow.com/questions/6857468/converting-a-js-object-to-an-array Этот сайт полон ресурсов! – Alburkerk

ответ

1

Если вы хотите, вы можете использовать Object.keys(objects), который вернет вам массив всех ключей в вашем первоначально разобранный объект, который вы могли бы итерацию и превратить в массив

Немного как в этом примере

'use strict'; 
 
var fakeJson = '{ "0" : { "_id" : { "$oid" : "57d129bfaa1ab0795a42cd9d" }, "id" : "155edc1698efc18e", "history_id" : "41752", "messages" : [ { "id" : "155edc1698efc18e", "snippet" : "Marino Pernar | IT Ulix exclusive travel experience T: +385 1 640 6649 | T: +385 91 6410 930 F: +385 1 615 4092 | E: [email protected] Ulix doo | Miramarska cesta 26 | HR–10000 Zagreb ----------", "labels" : [ "INBOX", "IMPORTANT", "CATEGORY_PERSONAL", "Label_15", "Label_7" ], "date" : "1468572702000", "history_id" : "41752" } ] }, "1": { "_id" : { "$oid" : "57d129bfaa1ab0795a42cd9d" }, "id" : "155edc1698efc18e", "history_id" : "41750", "messages" : [ { "id" : "155edc1698efc18e", "snippet" : "Marino Pernar | IT Ulix exclusive travel experience T: +385 1 640 6649 | T: +385 91 6410 930 F: +385 1 615 4092 | E: [email protected] Ulix doo | Miramarska cesta 26 | HR–10000 Zagreb ----------", "labels" : [ "INBOX", "IMPORTANT", "CATEGORY_PERSONAL", "Label_15", "Label_7" ], "date" : "1468572702000", "history_id" : "41752" } ] } }'; 
 

 
var objects = JSON.parse(fakeJson); 
 

 
console.log(objects); 
 

 
var copy = []; 
 

 
Object.keys(objects).forEach(function(key) { 
 
    copy.push(objects[key]); 
 
}); 
 

 
copy.sort(function(a, b) { 
 
    return a.history_id - b.history_id; 
 
}); 
 

 
console.log(copy);

кстати, вы уверены, что хотите отказаться от личной информации (адрес электронной почты, телефон NRS) здесь? Надеюсь, это фиктивная информация.

+0

Спасибо, что заметили это. Теперь это фиктивная информация, но даже все эти данные являются общедоступными. – Kunok

0

Как сказано в комментариях, вы должны работать с массивом для сортировки элементов.

Вы можете сделать это с помощью lodash библиотеки этот путь:

var arr = _.values(obj); 

При необходимости здесь является lodash values function documentation

Когда это сделано, вы можете использовать метод Array.sort для сортировки данных с помощью параметра compareFunction как вы можете видеть here.

+0

Я предпочитаю не использовать lodash в это время. – Kunok

+1

Итак, ответ Icepickle хорош для вас :) – Alador

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