@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
35 lines • 3.4 kB
JavaScript
/**
* Return an object containing arrays organized by property
*
* @param array - The array to split
* @param key - The object property to split by
* @returns An object containing arrays separated by property value
*
* @example
* interface MyObj {
* a: string;
* b: number;
* }
* const myArray: MyObj[] = [{a: 'foo', b: 1}, {a: 'bar', b: 6}, {a: 'foo', b: 6}];
* groupBy<MyObj, keyof MyObj>(myArray, 'a');
* Returns:
* {
* foo: [{a: 'foo', b: 1}, {a: 'foo', b: 6}],
* bar: [{a: 'bar', b: 6}],
* }
*/
export function groupBy(array, key) {
var initialValue = {};
return array.reduce(function (accumulator, x) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var idx = x[key];
// Create an array for the property if one does not exist
if (!accumulator[idx]) {
accumulator[idx] = [];
}
// Add the item to the property array
accumulator[idx].push(x);
return accumulator;
}, initialValue);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGVybWludXMvbmd4LXRvb2xzL3V0aWxpdGllcy8iLCJzb3VyY2VzIjpbImdyb3VwLWJ5L2dyb3VwLWJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBNEMsS0FBVSxFQUFFLEdBQU07SUFDbkYsSUFBTSxZQUFZLEdBQTBCLEVBQUUsQ0FBQztJQUUvQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyw4REFBOEQ7UUFDOUQsSUFBTSxHQUFHLEdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBUSxDQUFDO1FBRWxDLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDdkI7UUFFRCxxQ0FBcUM7UUFDckMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6QixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGFycmF5cyBvcmdhbml6ZWQgYnkgcHJvcGVydHlcbiAqXG4gKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gc3BsaXRcbiAqIEBwYXJhbSBrZXkgLSBUaGUgb2JqZWN0IHByb3BlcnR5IHRvIHNwbGl0IGJ5XG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBhcnJheXMgc2VwYXJhdGVkIGJ5IHByb3BlcnR5IHZhbHVlXG4gKlxuICogQGV4YW1wbGVcbiAqIGludGVyZmFjZSBNeU9iaiB7XG4gKiAgIGE6IHN0cmluZztcbiAqICAgYjogbnVtYmVyO1xuICogfVxuICogY29uc3QgbXlBcnJheTogTXlPYmpbXSA9IFt7YTogJ2ZvbycsIGI6IDF9LCB7YTogJ2JhcicsIGI6IDZ9LCB7YTogJ2ZvbycsIGI6IDZ9XTtcbiAqIGdyb3VwQnk8TXlPYmosIGtleW9mIE15T2JqPihteUFycmF5LCAnYScpO1xuICogUmV0dXJuczpcbiAqICAge1xuICogICAgIGZvbzogW3thOiAnZm9vJywgYjogMX0sIHthOiAnZm9vJywgYjogNn1dLFxuICogICAgIGJhcjogW3thOiAnYmFyJywgYjogNn1dLFxuICogICB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PFQsIEsgZXh0ZW5kcyhrZXlvZiBUICYgKG51bWJlciB8IHN0cmluZykpPihhcnJheTogVFtdLCBrZXk6IEspOiB7IFtpZDogc3RyaW5nXTogVFtdIH0ge1xuICBjb25zdCBpbml0aWFsVmFsdWU6IHsgW2lkOiBzdHJpbmddOiBUW10gfSA9IHt9O1xuXG4gIHJldHVybiBhcnJheS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCB4KSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBpZHg6IHN0cmluZyA9IHhba2V5XSBhcyBhbnk7XG5cbiAgICAvLyBDcmVhdGUgYW4gYXJyYXkgZm9yIHRoZSBwcm9wZXJ0eSBpZiBvbmUgZG9lcyBub3QgZXhpc3RcbiAgICBpZiAoIWFjY3VtdWxhdG9yW2lkeF0pIHtcbiAgICAgIGFjY3VtdWxhdG9yW2lkeF0gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGl0ZW0gdG8gdGhlIHByb3BlcnR5IGFycmF5XG4gICAgYWNjdW11bGF0b3JbaWR4XS5wdXNoKHgpO1xuXG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCBpbml0aWFsVmFsdWUpO1xufVxuIl19