按照键名排序保持排序

4
我正在尝试对一个对象进行排序,但似乎无法在排序后保留每个对象的键名。
以下是我要进行排序的示例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: {}

我需要 objectName,因为它在我的模板中用于描述其他所有内容。
这是我如何对数据进行排序的方法。
var items = _.sortBy(series_data.embeded, function(series, index) {
    return series.cd.last.value
}).reverse();`

当我需要的是objectNameA:{…},objectNameB:{…}时,这会返回0:{…}, 1:{…}, 2:{…}

或者更好的是

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

如何在按从高到低的顺序排序时保留或添加对象名称?

这可能会对您有所帮助:http://am.aurlien.net/post/1221493460/sorting-javascript-objects - Liglo App
1
JavaScript对象的键/属性没有保证的顺序,因此尝试对它们进行排序是徒劳无功的。 - idbehold
一个已排序属性的数组是否可行?然后,您只需遍历该数组并访问对象即可。 var names = Object.keys(series_data.embeded).sort() // 在此处使用某些排序函数。 - Will
2个回答

2
我通过在_.sortBy()中的每个object上设置一个key属性来实现这一点——虽然不是最理想的解决方案,但也算是一种方法。
_.sortBy(object, function(item, key) {
    item.key = key;
    return item.sortattribute;
});

2
我认为你不能仅通过一次 _.sortBy() 调用来完成这个任务。
但是,你可以分两步完成:
  1. 调用 _.sortBy() 并将每个对象的键分配为属性
  2. 在排序后的数组上调用 _.each() 以获得所需的对象结构
这里有一个示例JSBIN
根本问题在于对象是无序属性集合。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接