繁体   English   中英

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

[英]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。

提前感谢。

您可以这样使用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) 

您可以使用reduce ,因为在数字上下文中true = 1false = 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM