因此,假设我有以下对象数组:
var arr = [
{"name": "John", "score": "8.8"},
{"name": "John", "score": "8.6"},
{"name": "John", "score": "9.0"},
{"name": "John", "score": "8.3"},
{"name": "Tom", "score": "7.9"}
];
var count = 0;
var avgScore = arr.reduce(function (sum,person) {
if (person.name == "John") {
count+=1;
return sum + parseFloat(person.score);
}
return sum;
},0)/count);
问题:有没有一种方法可以在不创建全局变量的情况下计算“John”的平均分count多变的。理想情况下,计数应位于 arr.reduce 中匿名函数的内部。
为了避免全局变量,请使用标准解决方案,例如IIFEs https://stackoverflow.com/q/592396/1048572 or 块作用域 https://stackoverflow.com/q/33534485/1048572。不过我猜你正在寻找一种方法来避免可变计数器。
最简单的方法是预先删除所有其他人:
var johns = arr.filter(function(person) {
return person.name == "John";
});
var avgScore = johns.reduce(function (sum, person) {
return sum + parseFloat(person.score);
}, 0) / johns.length;
但您也可以使用count
与对象中的总和一起传递:
var stats = arr.reduce(function ({count, sum}, person) {
return (person.name == "John")
? {count: count+1, sum: sum + parseFloat(person.score)}
: {count, sum};
}, {count:0, sum:0})
var avgScore = stats.sum / stats.count);
(using ES6 object property shorthands and destructuring)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)