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