2015-07-28 12 views
6

Próbuję znaleźć zwięzły sposób na podział tablic obiektów na grupy tablic oparte na predykacie.Jak podzielić tablicę na wiele grup za pomocą Lodasha?

var arr = [ 
    {id: 1, val: 'a'}, 
    {id: 1, val: 'b'}, 
    {id: 2, val: 'c'}, 
    {id: 3, val: 'a'} 
]; 

//transform to below 

var partitionedById = [ 
    [{id: 1, val: 'a'}, {id: 1, val:'b'}], 
    [{id: 2, val: 'c'}], 
    [{id: 3, val: 'a'} 
]; 

this question widzę, co daje dobry przegląd przy użyciu zwykłego JS, ale zastanawiam się, czy istnieje bardziej zwięzły sposób to zrobić przy użyciu lodash? Widzę partition function, ale dzieli ona tylko tablice na 2 grupy (potrzebna jest "n" liczba partycji). groupBy grupuje go w obiekt za pomocą klawiszy, szukam tego samego, ale w tablicy (bez kluczy).

Czy istnieje prostszy sposób, aby zagnieździć kilka funkcji lodas, aby to osiągnąć?

Odpowiedz

8

Można pierwsza grupa przez id, która przyniesie obiekt gdzie klucze są różne wartości id i wartości są tablicą wszystkich elementów tablicy z tym identyfikatorem, który jest w zasadzie to, co chcesz (wykorzystanie _.values() dostać tylko tablice wartości):

// "regular" version 
var partitionedById = _.values(_.groupBy(arr, 'id')); 

// chained version 
var partitionedById = _(arr).groupBy('id').values().value(); 
+0

Dzięki! nie był świadomy funkcji _.values ​​() –