Mam tablicę takiego:Hrabia i sortować według liczby wystąpień
var items = [
{name: 'popcorn', category: 'snacks'},
{name: 'nachos', category: 'snacks'},
...
{name: 'coke', category: 'drinks'}
];
chcę uzyskać listę kategorii zamówionych przez liczbę przedmiotów na nim (najwięcej rzeczy pierwszy):
['snacks', 'drinks']
Oto jak to zrobiłem:
var categories = _.chain(items)
.countBy(function (i) { return i.category })
.pairs()
.sortBy(function (c) { return -c[1] })
.map(function (c) { return c[0] })
.value();
więc wynikiem countBy
to obiekt, a muszę używać pairs
, aby przekształcić go w tablicę tablic w celu posortowania.
Zastanawiam się, czy istnieje prostszy sposób na zrobienie tego? Wbudowana funkcja?
mogłyby po prostu przekazać „kategoria” w funkcji countBy. Sprawia, że to maleństwo jest nieco bardziej wyraziste. –
Czy zwrócona wartość nie wyglądałaby [["przekąski", 10] ["napoje", 9]]? – JSager
@JSager oops Zapomniałem kroku mapy. Naprawiony. –