繁体   English   中英

通过下划线.sortBy或javascript .sort函数对两层数组进行排序

[英]Sorting two layers array by underscore .sortBy or javascript .sort function

我对按增加进行JSON排序有问题。 现在看起来:

var array = {
   "2014\/2015":{
    "gamesPlayed":17,"goals":2,"assists":8,"points":10
   },
   "2013\/2014":{
    "gamesPlayed":52,"goals":18,"assists":16,"points":34
   },
   "2012\/2013":{
    "gamesPlayed":39,"goals":12,"assists":15,"points":27
   }
};

我需要按年份对项目进行排序,并获得如下对象:2012/2013:{...},2013/2014:{...},2014/2015:{...}

var sorted = array.sort(function(a,b){
    return a - b;
});

但显示控制台中的错误。

您的array变量实际上是一个object ,它没有.sort()方法,因为键是无序的。

您需要将“数组”对象转换为真实数组,首先获取日期值并对它们进行排序:

var date, realArrayOfDates = [];
for (date in array){
    realArrayOfDates.push(date);
}

然后使用`sort()对realArrayOfDates进行排序:

realArrayOfDates.sort();

现在,您可以遍历排序的日期并按顺序从“数组”中拉出项目

var realArrayOfObjects = [];
for (i in realArrayOfDates) {
    realArrayOfObjects.push(array[realArrayOfDates[i]]);
}

使用下划线或lodash尝试类似的操作。 这将在对象的每个项目上添加year属性,将其转换为数组,然后对数组进行排序。

_.chain(array)
 .map(function(val, key) {
   return _.extend({year: key}, val);
 })
 .sortBy('year')
 .value();

暂无
暂无

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

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