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.41 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) { const initialValue = {}; return array.reduce((accumulator, x) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGVybWludXMvbmd4LXRvb2xzL3V0aWxpdGllcy8iLCJzb3VyY2VzIjpbImdyb3VwLWJ5L2dyb3VwLWJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBNEMsS0FBVSxFQUFFLEdBQU07SUFDbkYsTUFBTSxZQUFZLEdBQTBCLEVBQUUsQ0FBQztJQUUvQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsOERBQThEO1FBQzlELE1BQU0sR0FBRyxHQUFXLENBQUMsQ0FBQyxHQUFHLENBQVEsQ0FBQztRQUVsQyx5REFBeUQ7UUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQscUNBQXFDO1FBQ3JDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBhcnJheXMgb3JnYW5pemVkIGJ5IHByb3BlcnR5XG4gKlxuICogQHBhcmFtIGFycmF5IC0gVGhlIGFycmF5IHRvIHNwbGl0XG4gKiBAcGFyYW0ga2V5IC0gVGhlIG9iamVjdCBwcm9wZXJ0eSB0byBzcGxpdCBieVxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYXJyYXlzIHNlcGFyYXRlZCBieSBwcm9wZXJ0eSB2YWx1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBpbnRlcmZhY2UgTXlPYmoge1xuICogICBhOiBzdHJpbmc7XG4gKiAgIGI6IG51bWJlcjtcbiAqIH1cbiAqIGNvbnN0IG15QXJyYXk6IE15T2JqW10gPSBbe2E6ICdmb28nLCBiOiAxfSwge2E6ICdiYXInLCBiOiA2fSwge2E6ICdmb28nLCBiOiA2fV07XG4gKiBncm91cEJ5PE15T2JqLCBrZXlvZiBNeU9iaj4obXlBcnJheSwgJ2EnKTtcbiAqIFJldHVybnM6XG4gKiAgIHtcbiAqICAgICBmb286IFt7YTogJ2ZvbycsIGI6IDF9LCB7YTogJ2ZvbycsIGI6IDZ9XSxcbiAqICAgICBiYXI6IFt7YTogJ2JhcicsIGI6IDZ9XSxcbiAqICAgfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxULCBLIGV4dGVuZHMoa2V5b2YgVCAmIChudW1iZXIgfCBzdHJpbmcpKT4oYXJyYXk6IFRbXSwga2V5OiBLKTogeyBbaWQ6IHN0cmluZ106IFRbXSB9IHtcbiAgY29uc3QgaW5pdGlhbFZhbHVlOiB7IFtpZDogc3RyaW5nXTogVFtdIH0gPSB7fTtcblxuICByZXR1cm4gYXJyYXkucmVkdWNlKChhY2N1bXVsYXRvciwgeCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgaWR4OiBzdHJpbmcgPSB4W2tleV0gYXMgYW55O1xuXG4gICAgLy8gQ3JlYXRlIGFuIGFycmF5IGZvciB0aGUgcHJvcGVydHkgaWYgb25lIGRvZXMgbm90IGV4aXN0XG4gICAgaWYgKCFhY2N1bXVsYXRvcltpZHhdKSB7XG4gICAgICBhY2N1bXVsYXRvcltpZHhdID0gW107XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBpdGVtIHRvIHRoZSBwcm9wZXJ0eSBhcnJheVxuICAgIGFjY3VtdWxhdG9yW2lkeF0ucHVzaCh4KTtcblxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwgaW5pdGlhbFZhbHVlKTtcbn1cbiJdfQ==