我从mongoDB获取数据并将其发送到客户端,返回的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);
当我记录它时,它看起来像这样:
它基本上是一个对象的对象。它像数组一样,但它不是数组,我不能使用sort
等数组方法。
这就是我的内部物体的样子。
{_id:object, history_id:string, id:string, messages:array}
我即将将history_id值转换为int,并按该值对这些对象进行排序。
我正在寻找通过该值对这些对象进行排序的最佳方法。我使用.sort
方法,但它是数组方法,并没有为对象类型定义。我会将主对象转换为数组并调用该方法。或者,如果有一种方法可以更优雅的方式对这些对象进行排序,而无需将其转换为数组。哪种方法更实用,如何正确实施?
答案 0 :(得分: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: admin@ulixtravel.com 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: admin@ulixtravel.com 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);

顺便问一下,您确定要在此处分发个人信息(电子邮件地址,电话号码)吗?我希望它是虚拟信息。
答案 1 :(得分:0)
如评论中所述,您必须使用数组来对元素进行排序。
您可以通过lodash
库这样做:
var arr = _.values(obj);
如果需要lodash values function documentation
完成后,您可以使用array.sort方法使用compareFunction参数对数据进行排序,如您所见here。