Как разбить массив на несколько групп с помощью 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'}
];

Я вижу этот вопрос, что дает хороший обзор, используя простой JS, но мне интересно, есть ли более краткий способ сделать это с помощью lodash? Я вижу функции раздел но он только разбивает массивы на 2 группы (нужно, чтобы это было 'n' количество разделов). The метода groupBy группы на объект ключи, я ищу то же самое, но в массиве (без ключей).

есть ли более простой способ, возможно, вложить пару функций lodash для достижения этого?

1 ответов


вы можете первая группа по id, который даст объект, где ключи являются различными значениями id и значения представляют собой массив всех элементов массива с этим идентификатором, что в основном то, что вы хотите (используйте _.values() чтобы получить только значения массивов):

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

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