Skip to content Skip to sidebar Skip to footer

Sum Elements Of An Array With Specific Attribute

I wanna sum the elements of an array, but not all. Let's say that my array is: var example = [ {'id': 1, 'value': 50, 'active': true}, {'id':

Solution 1:

You can use filter and reduce like so:

var a = [{"id": 1, "value": 50, "active": true}, {"id": 2, "value": 70, "active": false}, {"id": 3, "value": 45, "active": true}, {"id": 4, "value": 50, "active": false}]

var result = a.filter(o => o.active).reduce((acc, cur) => cur.value + acc, 0)

console.log(result)

Solution 2:

You can just use reduce, using the fact that in a numeric context true = 1 and false = 0:

var a = [{"id": 1, "value": 50, "active": true}, {"id": 2, "value": 70, "active": false}, {"id": 3, "value": 45, "active": true}, {"id": 4, "value": 50, "active": false}]

var result = a.reduce((a, c) => a + c.value * c.active, 0)

console.log(result)

Or if you prefer, using the ternary operator:

var a = [{"id": 1, "value": 50, "active": true}, {"id": 2, "value": 70, "active": false}, {"id": 3, "value": 45, "active": true}, {"id": 4, "value": 50, "active": false}]

var result = a.reduce((a, c) => a + (c.active ? c.value : 0), 0)

console.log(result)

Solution 3:

You can prefer a simple syntax...

var example = [{"id": 1, "value": 50, "active": true}, {"id": 2, "value": 70, "active": false}, {"id": 3, "value": 45, "active": true}, {"id": 4, "value": 50, "active": false}];
var sum = 0

example.forEach(function(item, index){
  if (item["active"] == true) sum += item["value"];
});

console.log(sum);

Solution 4:

I suggest you to use lodash If you need operation on array or collection

import lodash in file where you want to use it

import _ from'lodash';
// orconst _ = require('lodash');

Apply filter and sumBy

var example = [
 {"id": 1, "value": 50, "active": true}, 
 {"id": 2, "value": 70, "active": false},
 {"id": 3, "value": 45, "active": true}, 
 {"id": 4, "value": 50, "active": false}
];
//Filter all active value
const filterData = _.filter(example, "active");
// const filterData = [
//  {"id": 1, "value": 50, "active": true}, 
//  {"id": 3, "value": 45, "active": true}, 
// ];

//Sum all value filter data
const sum = _.sumBy(filterData, "value");

console.log(sum)

Post a Comment for "Sum Elements Of An Array With Specific Attribute"