具有特定属性的数组的元素总和

时间:2019-08-17 01:13:23

标签: javascript arrays angularjs

我想总结一个数组的元素,但不是全部。假设我的数组是:

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。

先感谢

4 个答案:

答案 0 :(得分:3)

您可以像这样使用filterreduce

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');

应用filtersumBy

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)