数组中对象的值求和
Sum values of objects in array
我想创建一个包含多个对象的数组的总和。
下面是一个示例: var array = [{"adults":2,"children":3},{"adults":2,"children":1}];
如何将成人和儿童的总和返回到一个新变量中?
谢谢三.
使用
Array.prototype.reduce()
,reduce() 方法对累加器和数组的每个值(从左到右)应用一个函数,以将其减少为单个值。
var array = [{
"adults": 2,
"children": 3
}, {
"adults": 2,
"children": 1
}];
var val = array.reduce(function(previousValue, currentValue) {
return {
adults: previousValue.adults + currentValue.adults,
children: previousValue.children + currentValue.children
}
});
console.log(val);
var array = [{"adults":2,"children":3},{"adults":2,"children":1}];
var totalChild = array.reduce((accum,item) => accum + item.children, 0)
console.log(totalChild) //output 4
看到还没有人发布这个...这是一个不错的速记方法:
.reduce((acc, curr) => acc + curr.property, 0)
例:
arr = [{x:1, y:-1}, {x:2, y:-2}, {x:3, y:-3}];
x_sum = arr.reduce((acc, curr) => acc + curr.x, 0); // 6
y_sum = arr.reduce((acc, curr) => acc + curr.y, 0); // -6
您可以为此任务编写一个函数,该函数使数组迭代应添加该属性的值。
该函数的主要功能是 Array#reduce 方法和一个返回实际计数 calue 和实际属性值的属性。
function count(array, key) {
return array.reduce(function (r, a) {
return r + a[key];
}, 0);
}
var array = [{ "adults": 2, "children": 3 }, { "adults": 2, "children": 2 }],
adults = count(array, 'adults'),
children = count(array, 'children');
document.write('Adults: ' + adults + '<br>');
document.write('Children: ' + children + '<br>');
var array = [{"adults":2,"children":3},{"adults":2,"children":1}];
var sumProps = prop => (sum, obj) => sum += obj[prop];
var adultsCount = array.reduce( sumProps('adults'));
var childrenCount = array.reduce( sumProps('children'));
要将每个本质的总和放入单独的变量中:
var array = [{"adults":2,"children":3},{"adults":2,"children":1}];
var adults_sum = 0, children_sum = 0;
array.forEach(function(obj){
adults_sum += obj["adults"];
children_sum += obj["children"];
});
console.log(adults_sum, children_sum); // 4 4
我们不是在为你编写代码,但我想你应该尝试:
var val = array.reduce(function (sum, tuple) {
return { adults: sum.adults + tuple.adults,
children: sum.children + tuple.children };
});
这是一个函数式编程中有趣的练习。假设您已经有一个用于简单数字数组的 sum
函数,您可以实现一个函数,该函数将在两个表达式中对对象数组的所有键的总数求和。不需要循环、硬编码的属性名称、匿名函数或if
/else
。我从我的回答中采用了以下代码 如何获取包含对象数组中所有项目总和的对象?:
var add = (a, b) => a + b;
var sum = _.partial(_.reduce, _, add, 0);
function sumByProperties(data) {
var keys = _.chain(data)
.map(_.keys).flatten().uniq().value();
return _.chain(keys).zip(keys).object()
.mapObject(_.property)
.mapObject(_.partial(_.map, data))
.mapObject(_.compose(sum, _.compact))
.value();
}
console.log(sumByProperties([{
apple: 1,
banana: 4,
fish: 2,
melon: 3,
}, {
apple: 3,
banana: 2,
fish: 5,
melon: 1,
}]));
<script src="https://cdn.jsdelivr.net/npm/underscore@1.13.6/underscore-umd-min.js"></script>
虽然sumByProperties
的实现并不简单,但弄清楚它是如何工作的将加深你对函数式编程的理解。这将使您能够非常简洁地编写一些内容,例如顶部sum
的定义。
为方便读者,以下是指向本代码段中使用的每个 Underscore 函数的文档的链接(按计算顺序):
_.partial
_.reduce
_.chain
_.map
_.keys
_.flatten
_.uniq
_.value
_.zip
_.object
_.mapObject
_.property
_.partial
_.compose
_.compact
也许它可以帮助你,这也不需要使用减少功能。
var sumAdult=0;
var sumChildren=0;
var array = [{
"adult": 2,
"children": 3
}, {
"adult": 2,
"children": 1
}];
function x(a,b){
return a+b;
}
for (y in array){
sumAdult=x(0, array[y].adult);
console.log( "adult :" + sumAdult);
sumChildren=x(0, array[y].children);
console.log( "children :" + sumChildren);
}
- 如何按对象数组进行分组和求和
- 求和d3对象数组上的元素
- 如何使用数组减少来求和对象属性长度,不带类型
- 如何让、要求和原型协同工作以在 javascript 中制作对象
- Javascript:对集合中的对象求和
- 合并两个对象数组,同时对特定键求和
- 带有 lodash 的子对象的求和属性
- 将两个数组分组/求和到对象中
- 数组中对象的值求和
- 在对象数组中对具有相同对象属性 B 的 JavaScript 对象属性 A 值求和
- 如何对数组对象进行求和
- 为什么数组和对象([ ] + {})的求和是javascript中的一个字符串
- 如何合并两个对象数组,并在 JavaScript 中对重复对象键的值求和
- AngularJS在对象之间求和
- 对数组中的多个对象求和/合并
- 对数组中的对象属性求和
- 循环通过嵌套json数组对象和求和值javascript
- 合并对象&对单个属性javascript求和
- 对多个数组中的多个对象求和,然后取平均值
- 如何求和对象的属性值