2014-11-24 66 views
2

我想排序一个对象,但似乎无法保持排序后的每个对象的关键名称。sortBy保留键名

下面是示例JSON我整理上

series_data: { 
embeded: { 
    objectNameA: { 
     item: { 
     last:{reportdate:2014-10-05, trend:=, change:0, value:0},…}, 
     first: {reportdate:2013-01-06, trend:?, change:null, value:0}, 
     high: 1, 
     low: 0, 
     median: 0.043478260869565216, 
     series: [{reportdate:2013-01-06, trend:?, change:null, value:0},…] 
    }, 
    objectNameB: {…} 

我需要的对象名becasue它在我的模板,用来形容一切。

这里是怎么了对数据进行排序

var items = _.sortBy(series_data.embeded, function(series, index) { 
    return series.cd.last.value 
}).reverse();` 

这将返回0:{…}, 1:{…}, 2:{…},当我需要它是objectNameA:{…},objectNameB:{…}

或更好,但

0:{objectNameA:{…},…}, 1:{objectNameB:{…},…} 

如何保持或增加的对象名,而在顺序排序从最高到最低?

+0

这可能是有益的http://am.aurlien.net/post/1221493460/sorting- javascript-objects – 2014-11-24 22:27:26

+1

Javascript对象键/属性没有保证顺序,所以试图对它们排序是徒劳的。 – idbehold 2014-11-24 22:43:36

+0

排序属性数组是否有效?之后,您可以遍历数组并访问您的对象。 var names = Object.keys(series_data.embeded).sort()//在这里使用某种排序函数。 – Will 2014-11-24 22:49:42

回答

0

我不认为你可以用_.sortBy()进行一次调用。

但是,可以在两个步骤中完成它:

  1. 呼叫_.sortBy()和分配的每个对象的键作为属性
  2. 呼叫_.each()中的排序后的数组,以在得到所期望的对象结构

下面是一个例子JSBIN

潜在的问题是,对象是属性的无序集合。

1

我实现了这个由_.sortBy()内设置每个object一个key财产 - 不理想,但一个解决方案

_.sortBy(object, function(item, key) { 
    item.key = key; 
    return item.sortattribute; 
});