groupBy()

The groupBy method groups the collection's items by a given key:

const collection = collect([
  {
    product: "Chair",
    manufacturer: "IKEA"
  },
  {
    product: "Desk",
    manufacturer: "IKEA"
  },
  {
    product: "Chair",
    manufacturer: "Herman Miller"
  }
]);

const grouped = collection.groupBy("manufacturer");

grouped.all();

//=> {
//=>   IKEA: [
//=>     {
//=>       id: 100,
//=>       product: 'Chair',
//=>       manufacturer: 'IKEA',
//=>       price: '1490 NOK',
//=>     },
//=>     {
//=>       id: 150,
//=>       product: 'Desk',
//=>       manufacturer: 'IKEA',
//=>       price: '900 NOK',
//=>     },
//=>   ],
//=>   'Herman Miller': [
//=>     {
//=>       id: 200,
//=>       product: 'Chair',
//=>       manufacturer: 'Herman Miller',
//=>       price: '9990 NOK',
//=>     },
//=>   ]
//=> }

In addition to passing a string key, you may also pass a callback. The callback should return the value you wish to key the group by:

const collection = collect([
  {
    product: "Chair",
    manufacturer: "IKEA"
  },
  {
    product: "Desk",
    manufacturer: "IKEA"
  },
  {
    product: "Chair",
    manufacturer: "Herman Miller"
  }
]);

const grouped = collection.groupBy(function(item, key) {
  return item.manufacturer.substring(0, 3);
});

grouped.all();

//=> {
//=>   IKE: [
//=>     {
//=>       id: 100,
//=>       product: 'Chair',
//=>       manufacturer: 'IKEA',
//=>       price: '1490 NOK',
//=>     },
//=>     {
//=>       id: 150,
//=>       product: 'Desk',
//=>       manufacturer: 'IKEA',
//=>       price: '900 NOK',
//=>     },
//=>   ],
//=>   Her: [
//=>     {
//=>       id: 200,
//=>       product: 'Chair',
//=>       manufacturer: 'Herman Miller',
//=>       price: '9990 NOK',
//=>     },
//=>   ]
//=> }

View source on GitHub