繁体   English   中英

下划线将对象转换为数组并按键名排序

[英]Underscore convert object to array and sort by key name

我一直在使用下面的代码来转换计数数组中的大日期列表,然后可以在简单的折线图中使用它。 我遇到的问题是按年和周编号对值进行排序。 当我拥有[{201501: 20},{201502: 20},{201451: 20},{201452: 20}]我需要按键名将数组排序为以下格式[{201451: 20},{201452: 20},{201501: 20},{201502: 20}] 他们我只是用_.values()丢弃了键

我要如何对带下划线的数组进行排序,我已经尝试了一些方法,但是此时我还是很迷茫。

    var graphData = _.chain(thisYearFiltered)
    // map each string like '2014-01-01 00:00:00' using moment.js to the ISO Week. ISO weeks are used because they run Monday to Sunday
    .map(function(date){ 
        return moment(date, "YYYY-MM-DD HH:mm:ss").isoWeekYear() + moment(date, "YYYY-MM-DD HH:mm:ss").isoWeek(); 
    })
    // Manipulate weeks numbers [201423,201423,201423,201423,201424] into a count for each like [{201423:4 },{201424:1}]
    .countBy(function(num) {
        //console.log(num);
        return num;
    })
    // Pull out the values of the objects and discard the week number. [{23:4 },{24:1}] to [4,1]
    .values()
    .value();

我知道使用下划线是可能的,但是我已经碰到了这个问题,因此欢迎提出任何建议。

我已经研究过_.sortBy()但是似乎希望可以对命名键进行排序,而在我的情况下,键名都是不同的。 我可以对第一把钥匙做些类似的事情吗?

对于对象, sortBy还将键作为第二个参数传递给回调,并且仅在对对象进行排序后保留其值,因此:

_.chain([201423, 201423, 201423, 201423, 201424]).
   countBy(function(n) { return n; }).
   sortBy(function(v, k) { return k; }).
   value()

[ 4, 1 ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM