Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript Group By Array

Possible Duplicate:
array_count_values for javascript instead

Let's say I have simple JavaScript array like the following:

var array = ['Car', 'Car', 'Truck', 'Boat', 'Truck'];

I want to group and count of each so I would expect a key/value map of:

{
  Car   : 2,
  Truck : 2,
  Boat  : 1
}
like image 589
aherrick Avatar asked Oct 13 '12 12:10

aherrick


People also ask

How do you group an array in JavaScript?

Use reduce() to Group an Array of Objects in JavaScript The most efficient way to group an array of objects in JavaScript is to use the reduce() function. This method executes each array element's (specified) reducer function and produces a single output value.

How do you group objects in an array?

The most efficient method to group by a key on an array of objects in js is to use the reduce function. The reduce() method executes a reducer function (that you provide) on each element of the array, resulting in a single output value.

How do you group an array of objects by Key in react js?

// Accepts the array and key const groupBy = (array, key) => { // Return the end result return array. reduce((result, currentValue) => { // If an array already present for key, push it to the array. Else create an array and push the object (result[currentValue[key]] = result[currentValue[key]] || []).


2 Answers

var arr = [ 'Car', 'Car', 'Truck', 'Boat', 'Truck' ]; var hist = {}; arr.map( function (a) { if (a in hist) hist[a] ++; else hist[a] = 1; } ); console.log(hist); 

results in

{ Car: 2, Truck: 2, Boat: 1 } 

This works, too:

hist = arr.reduce( function (prev, item) {    if ( item in prev ) prev[item] ++;    else prev[item] = 1;    return prev;  }, {} ); 
like image 158
Rudolf Mühlbauer Avatar answered Sep 27 '22 21:09

Rudolf Mühlbauer


You can loop through each index and save it in a dictionary and increment it when every that key is found.

count = {};
for(a in array){
  if(count[array[a]])count[array[a]]++;
  else count[array[a]]=1;
}

Output will be:

Boat: 1
Car: 2
Truck: 2
like image 27
Shubhanshu Mishra Avatar answered Sep 27 '22 22:09

Shubhanshu Mishra