var groupArray = require('{%= name %}');
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'}
];
// group by the `tag` property
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
// given an array of object, like blog posts...
var arr = [
{ data: { year: '2016', tag: 'one', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'feb', day: '12'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'feb', day: '12'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'jan', day: '14'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'jan', day: '14'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'jan', day: '16'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'jan', day: '16'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'feb', day: '18'}, content: '...'},
{ data: { year: '2017', tag: 'two', month: 'feb', day: '18'}, content: '...'},
{ data: { year: '2017', tag: 'two', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2017', tag: 'two', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'feb', day: '01'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'feb', day: '01'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'feb', day: '02'}, content: '...'},
{ data: { year: '2017', 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)
{ '2016':
{ one:
{ jan:
{ '01':
[ { data: { year: '2016', tag: 'one', month: 'jan', day: '01' },
content: '...' },
{ data: { year: '2016', tag: 'one', month: 'jan', day: '01' },
content: '...' } ],
'02':
[ { data: { year: '2016', tag: 'one', month: 'jan', day: '02' },
content: '...' },
{ data: { year: '2016', tag: 'one', month: 'jan', day: '02' },
content: '...' } ] },
feb:
{ '10':
[ { data: { year: '2016', tag: 'one', month: 'feb', day: '10' },
content: '...' },
{ data: { year: '2016', tag: 'one', month: 'feb', day: '10' },
content: '...' } ],
'12':
[ { data: { year: '2016', tag: 'one', month: 'feb', day: '12' },
content: '...' },
{ data: { year: '2016', tag: 'one', month: 'feb', day: '12' },
content: '...' } ] } },
two:
{ jan:
{ '14':
[ { data: { year: '2016', tag: 'two', month: 'jan', day: '14' },
content: '...' },
{ data: { year: '2016', tag: 'two', month: 'jan', day: '14' },
content: '...' } ],
'16':
[ { data: { year: '2016', tag: 'two', month: 'jan', day: '16' },
content: '...' },
{ data: { year: '2016', tag: 'two', month: 'jan', day: '16' },
content: '...' } ] },
feb:
{ '18':
[ { data: { year: '2016', tag: 'two', month: 'feb', day: '18' },
content: '...' } ] } } },
'2017':
{ two:
{ feb:
{ '10':
[ { data: { year: '2017', tag: 'two', month: 'feb', day: '10' },
content: '...' },
{ data: { year: '2017', tag: 'two', month: 'feb', day: '10' },
content: '...' } ],
'18':
[ { data: { year: '2017', tag: 'two', month: 'feb', day: '18' },
content: '...' } ] } },
three:
{ jan:
{ '01':
[ { data: { year: '2017', tag: 'three', month: 'jan', day: '01' },
content: '...' },
{ data: { year: '2017', tag: 'three', month: 'jan', day: '01' },
content: '...' } ],
'02':
[ { data: { year: '2017', tag: 'three', month: 'jan', day: '02' },
content: '...' },
{ data: { year: '2017', tag: 'three', month: 'jan', day: '02' },
content: '...' } ] },
feb:
{ '01':
[ { data: { year: '2017', tag: 'three', month: 'feb', day: '01' },
content: '...' },
{ data: { year: '2017', tag: 'three', month: 'feb', day: '01' },
content: '...' } ],
'02':
[ { data: { year: '2017', tag: 'three', month: 'feb', day: '02' },
content: '...' },
{ data: { year: '2017', tag: 'three', month: 'feb', day: '02' },
content: '...' } ] } } } }