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

时间:2014-10-17 14:42:45

标签: javascript sorting

我通过增加来解决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;
});

但它在控制台中表现出错误。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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]]);
}

答案 2 :(得分:0)

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

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