排序通过保留键名

sortBy keeping key name

本文关键字:保留 排序      更新时间:2023-09-26

我正在尝试对对象进行排序,但在排序后似乎无法保留每个对象的键名。

这是我正在排序的示例 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: {…}

我需要对象名称,因为它在我的模板中用于描述其他所有内容。

这是我对数据进行排序的方式

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

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

或者更好

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

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

我认为你不能通过一次调用_.sortBy()来做到这一点。

但是,您可以通过两个步骤完成它:

  1. 调用 _.sortBy() 并将每个对象的键分配为属性
  2. 在排序数组上调用 _.each() 以获取所需的对象结构

下面是一个示例 JSBIN

根本问题是对象是属性的无序集合。

我通过在_.sortBy()中的每个object上设置一个key属性来实现这一点 - 不理想,而是一种解决方案

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