Функциональный JavaScriptГруппировкаmedium

Группировка одинаковых элементов

Функция group принимает массив arr и функцию isEqual, определяющую, равны два значения или нет.

Результатом является массив из массивов. В каждом вложенном массиве собраны все элементы, которые равны между собой с точки зрения функции isEqual.

Примеры

Можно группировать строки по длине:

const words = [ "the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" ]; const result = group(words, (a, b) => a.length === b.length); const expectedResult = [ ["the", "fox", "the", "dog"], ["quick", "brown", "jumps"], ["over", "lazy"], ]

Или группировать объекты по любым свойствам:

const arr = [ { x: 1, y: 2 }, { x: 4, y: 5 }, { x: 1, y: 3 }, { x: 4, y: 2 }, { x: 7, y: 3 }, ]; console.log(group(arr, (a, b) => a.x === b.x)); const expectedResult1 = [ [{ x: 1, y: 2 }, { x: 1, y: 3 }], [{ x: 4, y: 5 }, { x: 4, y: 2 }], [{ x: 7, y: 3 }], ] console.log(group(arr, (a, b) => a.y === b.y)); const expectedResult2 = [ [{ x: 1, y: 2 }, { x: 4, y: 2 }], [{ x: 4, y: 5 }], [{ x: 1, y: 3 }, { x: 7, y: 3 }], ]