UNPKG

@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
/** * 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