按对象值

时间:2016-09-08 09:51:48

标签: javascript

我从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);

解析它

当我记录它时,它看起来像这样:

enter image description here

它基本上是一个对象的对象。它像数组一样,但它不是数组,我不能使用sort等数组方法。

这就是我的内部物体的样子。

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

我即将将history_id值转换为int,并按该值对这些对象进行排序。

我正在寻找通过该值对这些对象进行排序的最佳方法。我使用.sort方法,但它是数组方法,并没有为对象类型定义。我会将主对象转换为数组并调用该方法。或者,如果有一种方法可以更优雅的方式对这些对象进行排序,而无需将其转换为数组。哪种方法更实用,如何正确实施?

2 个答案:

答案 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