group-array
Group array of objects into lists.
Install
Install with npm
$ npm i group-array --save
Usage
var groupArray = require('group-array');
Examples
var arr = [
{tag: 'one', content: 'A'},
{tag: 'one', content: 'B'},
{tag: 'two', content: 'C'},
{tag: 'two', content: 'D'},
{tag: 'three', content: 'E'},
{tag: 'three', content: 'F'}
];
groupArray(arr, 'tag');
results in:
{
one: [
{tag: 'one', content: 'A'},
{tag: 'one', content: 'B'}
],
two: [
{tag: 'two', content: 'C'},
{tag: 'two', content: 'D'}
],
three: [
{tag: 'three', content: 'E'},
{tag: 'three', content: 'F'}
]
}
Group by multiple, deeply nested properties
var arr = [
{ data: { year: '2014', tag: 'one', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2014', tag: 'one', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2014', tag: 'one', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2014', tag: 'one', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2014', tag: 'one', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2014', tag: 'one', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2014', tag: 'one', month: 'feb', day: '12'}, content: '...'},
{ data: { year: '2014', tag: 'one', month: 'feb', day: '12'}, content: '...'},
{ data: { year: '2014', tag: 'two', month: 'jan', day: '14'}, content: '...'},
{ data: { year: '2014', tag: 'two', month: 'jan', day: '14'}, content: '...'},
{ data: { year: '2014', tag: 'two', month: 'jan', day: '16'}, content: '...'},
{ data: { year: '2014', tag: 'two', month: 'jan', day: '16'}, content: '...'},
{ data: { year: '2014', tag: 'two', month: 'feb', day: '18'}, content: '...'},
{ data: { year: '2015', tag: 'two', month: 'feb', day: '18'}, content: '...'},
{ data: { year: '2015', tag: 'two', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2015', tag: 'two', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2015', tag: 'three', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2015', tag: 'three', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2015', tag: 'three', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2015', tag: 'three', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2015', tag: 'three', month: 'feb', day: '01'}, content: '...'},
{ data: { year: '2015', tag: 'three', month: 'feb', day: '01'}, content: '...'},
{ data: { year: '2015', tag: 'three', month: 'feb', day: '02'}, content: '...'},
{ data: { year: '2015', tag: 'three', month: 'feb', day: '02'}, content: '...'}
]
Pass a list or array of properties:
groupArray(arr, 'data.year', 'data.tag', 'data.month', 'data.day');
Results in something like this: (abbreviated)
{
'2014':
{ one:
{ jan:
{ '01':
[ { data: { year: '2014', ... },
{ data: { year: '2014', ... } ],
'02':
[ { data: { year: '2014', ... },
{ data: { year: '2014', ... } ] },
feb:
{ '10':
[ { data: { year: '2014', ... },
{ data: { year: '2014', ... } ],
'12':
[ { data: { year: '2014', ... },
{ data: { year: '2014', ... } ] } },
two:
{ jan:
{ '14':
[ { data: { year: '2014', ... },
{ data: { year: '2014', ... } ],
'16':
[ { data: { year: '2014', ... },
{ data: { year: '2014', ... } ] },
feb:
{ '18':
[ { data: { year: '2014', ... } ] } } },
'2015':
{ two:
{ feb:
{ '10':
[ { data: { year: '2015', ... },
{ data: { year: '2015', ... } ],
'18':
[ { data: { year: '2015', ... } ] } },
three:
{ jan:
{ '01':
[ { data: { year: '2015', ... },
{ data: { year: '2015', ... } ],
'02':
[ { data: { year: '2015', ... },
{ data: { year: '2015', ... } ] },
feb:
{ '01':
[ { data: { year: '2015', ... },
{ data: { year: '2015', ... } ],
'02':
[ { data: { year: '2015', ... },
{ data: { year: '2015', ... } ] } } }};
Related projects
- arr-reduce: Fast array reduce that also loops over sparse elements.
- group-object: Group object keys and values into lists.
- get-value: Use property paths (
a.b.c
) to get a nested value from an object. - union-value: Set an array of unique values as the property of an object. Supports setting deeply… more
Running tests
Install dev dependencies:
$ npm i -d && npm test
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue
Author
Brian Woodward
License
Copyright © 2015 Brian Woodward
Released under the MIT license.
This file was generated by verb-cli on July 22, 2015.