我想总结一个数组的元素,但不是全部。假设我的数组是:
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。
先感谢
答案 0 :(得分:3)
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)
答案 1 :(得分:1)
您可以只使用reduce
,这是因为在数字上下文export function StringComparator(valueA: string = '', valueB: string = '') {
const valueALower = valueA.toLowerCase().trim();
const valueBLower = valueB.toLowerCase().trim();
return valueALower.localeCompare(valueBLower, 'en', { numeric: true });
}
和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)
答案 2 :(得分:1)
您可能更喜欢简单的语法...
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);
答案 3 :(得分:0)
我建议您使用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)