2015-07-28 6 views
6

Ich versuche, eine kompakte Möglichkeit zu finden, ein Array von Objekten in Gruppen von Arrays basierend auf einem Prädikat zu partitionieren.Wie Partition Array in mehrere Gruppen mit Lodash partitionieren?

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

ich this question sehen, die einen guten Überblick auf Normal JS gibt, aber ich frage mich, ob es eine prägnante Art und Weise, dies zu tun mit lodash? Ich sehe die partition function, aber es teilt nur die Arrays in 2 Gruppen (müssen es 'n' Anzahl der Partitionen sein). Die gruppiert es in ein Objekt per Schlüssel, ich suche das gleiche aber in einem Array (ohne Schlüssel).

Gibt es eine einfachere Möglichkeit, ein paar lodash-Funktionen zu verschachteln, um dies zu erreichen?

Antwort

8

Sie können erste Gruppe von id, die ein Objekt ergeben, wo die Schlüssel für die verschiedenen Werte von id sind und die Werte sind ein Array aller Array-Elemente mit dieser ID, die im Grunde ist das, was Sie wollen (Verwendung _.values() erhalten nur die Werte Arrays):

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

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

Vielen Dank! war die Funktion _.values ​​() nicht bekannt –