UNPKG

@quinck/collections

Version:

Allows extra operations on JavaScript collections: Array, Map and Set.

31 lines (30 loc) 1.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Array.prototype.groupBy = function (keyMapper, valueMapper, mergeFunction = (_, b) => b) { const _self = this; return _self.reduce((map, item) => { const key = keyMapper(item); const value = valueMapper(item); const prevValue = map.get(key); map.set(key, prevValue ? mergeFunction(prevValue, value) : value); return map; }, new Map()); }; Array.prototype.groupByToDictionary = function (keyMapper, valueMapper, mergeFunction = (_, b) => b) { const _self = this; return _self.reduce((object, item) => { const key = keyMapper(item); const value = valueMapper(item); const prevValue = object[key]; object[key] = prevValue ? mergeFunction(prevValue, value) : value; return object; }, {}); }; Array.prototype.simpleGroupBy = function (keyMapper) { const _self = this; return _self.groupBy(keyMapper, v => [v], (a, b) => a.concat(b)); }; Array.prototype.simpleGroupByToDictionary = function (keyMapper) { const _self = this; return _self.groupByToDictionary(keyMapper, v => [v], (a, b) => a.concat(b)); };