如何使用Lodash将数组分成多个组?

Jus*_*aat 9 javascript lodash

我试图找到一种简洁的方法,根据谓词将对象数组分成数组.

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'}
];
Run Code Online (Sandbox Code Playgroud)

我看到这个问题,使用普通JS提供了一个很好的概述,但我想知道是否有更简洁的方法来使用lodash做到这一点?我看到了分区功能,但它只将数组拆分为2组(需要它是'n'个分区).groupBy通过键将它分组为一个对象,我正在寻找相同但在数组中(没有键).

是否有一种更简单的方法可以嵌套几个lodash函数来实现这一目标?

rob*_*lep 13

您可以先分组id,这将生成一个对象,其中键是不同的值,id值是具有该id的所有数组项的数组,这基本上是您想要的(用于_.values()获取值数组):

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

// chained version
var partitionedById = _(arr).groupBy('id').values().value();
Run Code Online (Sandbox Code Playgroud)