Languages
[Edit]
EN

JavaScript - group / grouping array items with reduce method

1 points
Created by:
Greg
1505

In this article, we're going to have a look at how to group array items with reduce method. This article shows two ways to use Array reduce method to group array by item property. Second one example shows how to group it with nested properties.

1. Group by object property example

This section contains simple grouping of the array by property. Array reduce method in below example takes two arguments:

  • function that converts array structure,
  • empty object that will be filled with groups.

To change group name it is necessary only to change property variable.

// ONLINE-RUNNER:browser;

var property = 'age'; // by this item property array will be grouped
var array = [
  { name: 'John',  age: 25 },
  { name: 'Kate',  age: 21 },
  { name: 'Pablo', age: 25 },
  { name: 'Denis', age: 25 },
  { name: 'Chris', age: 31 }
];

var groups = array.reduce(function(groups, item) {
  var name = item[property]
  var group = groups[name] || (groups[name] = [ ]);
  group.push(item);

  return groups;
}, { });

for(var key in groups) {
  var group = groups[key];
  console.log('"' + key + '" group contains ' + group.length + ' elements')
}

2. Group by nested object property example

In this section first example was modiffied to provide grouping by nested property.

To change group name it is necessary only to change path array to own one.

// ONLINE-RUNNER:browser;

var path = ['details', 'age']; // by this nested item property array will be grouped
var array = [
  { name: 'John',  details: { age: 25 } },
  { name: 'Kate',  details: { age: 21 } },
  { name: 'Pablo', details: { age: 25 } },
  { name: 'Denis', details: { age: 25 } },
  { name: 'Chris', details: { age: 31 } }
];

var groups = array.reduce(function(groups, item) {
  var name = path.reduce(function(data, key) {
    return data[key]
  }, item);

  var group = groups[name] || (groups[name] = [ ]);
  group.push(item);

  return groups;
}, { });

for(var key in groups) {
  var group = groups[key];
  console.log('"' + key + '" group contains ' + group.length + ' elements')
}

 

Hey 👋
Would you like to know what we do?
  • Dirask is a friendly IT community for learners, professionals and hobbyists to share their knowledge and help each other in extraordinary easy way.
  • We welcome everyone,
    no matter what the experience,
    no matter how basic the question is,
    this community will help you.