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

Полифил Map.groupBy

Реализуйте аналог стандартного метода Map.groupBy.

Функция groupBy принимает iterable и callback, с помощью которого можно понять, к какой группе относится очередной элемент iterable.

Возвращает объект Map, где по ключам собраны элементы, относящиеся к одной группе.

Пример

Допустим, мы хотим сгруппировать слова по длине слова. Ключом мэпа будет являться число, длина строки, значением — массив элементов с такой длиной.

В качестве аргумента передается множество (Set) со словами и функция, превращающая слово в его длину.

const words = [ "the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" ]; const result = groupBy(words, a => a.length); // Map { // 3 => ["the", "fox", "the", "dog"], // 5 => ["quick", "brown", "jumps"], // 4 => ["over", "lazy"], // }

Интерфейс функции

Что принимает

  • items — итерируемое значение (например, строку, массив или множество), элементы которого нужно сгруппировать. По items можно пройти с помощью цикла for-of.
  • callback — функция, выполняющаяся на каждом элементе iterable. Она возвращает значение (объект или примитив), определяющее группу элемента. Колбэк принимает два аргумента:
    • element — текущий элемент;
    • index — индекс текущего элемента.

Что возвращает

  • Объект класса Map, в котором ключами являются группы, а значениями массивы с элементами, принадлежащими данной группе.