@quinck/collections
Version:
Allows extra operations on JavaScript collections: Array, Map and Set.
31 lines (30 loc) • 1.2 kB
JavaScript
;
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));
};