Skip to content

Instantly share code, notes, and snippets.

@benwells
Created May 12, 2016 13:40
Show Gist options
  • Save benwells/0111163b3cccfad0804d994c70de7aa1 to your computer and use it in GitHub Desktop.
Save benwells/0111163b3cccfad0804d994c70de7aa1 to your computer and use it in GitHub Desktop.
Using Array.reduce to sum a property in an array of objects
var accounts = [
{ name: 'James Brown', msgCount: 123 },
{ name: 'Stevie Wonder', msgCount: 22 },
{ name: 'Sly Stone', msgCount: 16 },
{ name: 'Otis Redding', msgCount: 300 } // Otis has the most messages
];
// get sum of msgCount prop across all objects in array
var msgTotal = accounts.reduce(function(prev, cur) {
return prev + cur.msgCount;
}, 0);
console.log('Total Messages:', msgTotal); // Total Messages: 461
@everaldomatias
Copy link

Great.

How to sum value only when the key 'name' that duplicate, sample:

var accounts = [
  { name: 'Blue', count: 2 },
  { name: 'Red', count: 3 },
  { name: 'Yellow', count: 4 },
  { name: 'Red', count: 5 }
];

And return:

var return = [
  { name: 'Blue', count: 2 },
  { name: 'Red', count: 8 },
  { name: 'Yellow', count: 4 }
];

@mikalcallahan
Copy link

@benwells @perdugames very clutch, thanks!

@James-n9ne4our
Copy link

James-n9ne4our commented Jul 11, 2021

@everaldomatias have you found any solution to that please???

@everaldomatias
Copy link

@James-n9ne4our i still haven't found the solution.

@RihabBerry
Copy link

this is the genius solution!

@leonelmatsinhe
Copy link

In ES6: const msgTotal = accounts.reduce((prev, cur) => prev + cur.msgCount, 0);

Thanks dude!

@stoicalpirate
Copy link

Thanks - super useful!

@saurav2811
Copy link

Is it possible to use reduce if I have a calculation trough-out multiple properties like this:

var items = [
  { name: 'Item 1', amount: 123, discount: 0.1 },
  { name: 'Item 2', amount: 22, discount: 0.1 },
  { name: 'Item 3', amount: 16, discount: 0.2 },
  { name: 'Item 4', amount: 300, discount: 0 }
];

So I have to do something like this:

total = sum_all_items(amount - (amount * discount))

simplify it as total = sum_all_items(amount * (1 - discount))
OR
first, just make, discount = 1 - discount, and then, sum(amount * discount)

@Bizzle-Dapp
Copy link

Banging. Nice one, mate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment