javascript - Is there a method to split an array of objects into groups? -


suppose have array of objects sort of groupable key:

var people = [     { 'name':'alice',   'gender': 'female' },     { 'name':'bob',     'gender': 'male'   },     { 'name':'jeremy',  'gender': 'male'   },     { 'name':'jess',    'gender': 'female' },     { 'name':'seymour', 'gender': 'female' }, ]; 

is there (native) function/method can applied array 'unzip' array 2 arrays, so:

boysandgirls = people.[**something**]('gender'); 

that result in:

{    'male': [ ... ],    'female': [ ... ] } 

or even:

[   [ {bob, ...}, {jeremy, ...}, {seymour, ...} ], // 'males' array   [ {alice, ...}, {jess, ...} ] // 'female' array ] 

i write algorithm myself, want know if there native array method -- or 1 might exist in language polyfilled in?

there no such method in javascript. ruby has in enumerator#group_by:

people.group_by { |person| person['gender'] } 

and easy enough write in javascript well. in fact, libraries have already, e.g. lodash.

_.groupby(people, function(person) {   return person['gender']; }); 

if write yourself, can customise bit:

function groupbyprop(array, prop) {   var result = {};   array.foreach(function(item) {     var val = item[prop];     if (!result[val]) result[val] = [item];     else result[val].push(item);   });   return result; } groupbyprop(people, 'gender');