[英]Sum elements of an array with specific attribute
我想总结一个数组的元素,但不是全部。 假设我的数组是:
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}
];
我需要做的是只将元素的values
与"active":true
相加。
有办法做到吗? 也许太简单了,但是现在,我的大脑已经死了。
我正在使用Javascript和AngularJs。
提前感谢。
您可以使用reduce
,因为在数字上下文中true = 1
和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)
或者,如果愿意,可以使用三元运算符:
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)
您可能更喜欢简单的语法...
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);
我建议您使用lodash如果需要对数组或集合进行操作
在要使用的文件中导入lodash
import _ from 'lodash';
// or
const _ = require('lodash');
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.