Недавно я наткнулся на эту проблему, пытаясь сгруппировать массив объектов по одному из его свойств, в результате чего я не смог отсортировать один объект.
Конкретно это массив постов в блоге, которые я хотел сгруппировать по годам и отсортировать по убыванию.Я использовал утилиту подчеркивания:
var grouped = _.groupBy(blogposts, function(post){
var date = new Date(post.publication_date)
return date.getFullYear()
})
//=> { 2010: [blogpost, blogpost,etc], 2011: [blogpost, etc] }
Как объяснял @Raynos, мне нужно было сначала получить какой-то массив перед сортировкой ...
Оказывается, подчеркивание (1.4) имеетмилая маленькая утилита с именем pairs
, которая отобразит {key: value} вашего объекта в массив [key, value].Эквивалент:
var paired = _.map(grouped, function(val, key){
return [key, val]
})
//=> [ [2010, [blogpost, blogpost, ...] ], [2011, [blogpost, blogpost, ...]]...]
С этого момента вы можете легко сортировать по первому члену каждой пары.
Вот конечный результат:
var grouped = _.groupBy(result.resource, function(resource){
var date = new Date(resource.pub_date)
return date.getFullYear() //+ "." + (date.getMonth()+1)
})
var paired = _.pairs(grouped)
var sorted = _.sortBy(paired, function(pairs){
return -parseInt(pairs[0])
})
return sorted;
// Giving me the expected result:
//=> [ [2013, [blogpost, blogpost, ...] ], [2012, [blogpost, blogpost, ...]]...]
Я уверен, что есть лучший и более производительный способ, но, исходя из ruby, этот код мне сразу понятен.