我正在尝试找到一种简洁的方法,根据谓词将对象数组分区为数组。
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,它使用普通JS提供了一个很好的概述,但我想知道是否有更简洁的方法来使用lodash做到这一点?我看到partition function,但它只将数组拆分为2组(需要它是'n'个分区)。 groupBy通过键将它分组到一个对象中,我正在寻找相同但在数组中(没有键)。
是否有更简单的方法可以嵌套几个lodash函数来实现这一目标?
答案 0 :(得分:13)
您可以先按id
进行分组,这将产生一个对象,其中键是id
的不同值,值是具有该ID的所有数组项的数组,这基本上是什么你想要(使用_.values()
来获得值数组):
// "regular" version
var partitionedById = _.values(_.groupBy(arr, 'id'));
// chained version
var partitionedById = _(arr).groupBy('id').values().value();