var people = [
{
name: 'shihan', //persons name, favorite color, and age
color: 'blue',
age: 22
},
{
name: 'john',
color: 'blue',
age: 21
},
{
name: 'pete',
color: 'blue',
age: 26
}
] //json api
var newPerson = people.filter(function(x){ return x.color === 'blue'})
newPerson.map(x => x.name)
newPerson.reduce((a,b) => a.age + b.age)
NaN //output
我需要计算每个人的年龄并求出总和,请帮忙!我创建了一个API,并使用reduce 方法来查找人员数组中的年龄。
在您的示例中,您需要提供
Array.protoype.reduce()
的起始值,在您的情况下为 0
。
newPerson.reduce((total, a) => total + a.age, 0)
或者,您可以跳过起始编号并使用
total || 0
并满足最初不通过 0
的要求,但我不推荐这样做。
您得到
NaN
的原因是因为您在第二次迭代中尝试查找不存在的对象(一旦从原语自动装箱)上的属性,从而给您 undefined + <Number>
。这也是同样的原因,如果你的数组只有 2 个成员,它会按原样工作。
如果未提供 来源initialValue
,则
将等于 数组中的第一个值和previousValue
将等于 第二个。currentValue
另请注意,这些方法不会改变原始数组,因此您当前拥有的代码会丢弃结果(尽管您在那里有输出,所以也许您已经知道这一点并且您处于 REPL 中)。
var people = [{
name: 'shihan', //persons name, favorite color, and age
color: 'blue',
age: 22
}, {
name: 'john',
color: 'blue',
age: 21
}, {
name: 'pete',
color: 'blue',
age: 26
}],
newPerson = people.filter(function(x) {
return x.color === 'blue'
});
document.write(newPerson.reduce((a, b) => a + b.age, 0));
var sum=0;
for(var i=0;i<people.length; i++) {
sum+= people[i].age;
}
Array.prototype.sum = function(){
return this.reduce((sum,current) => sum + current,0);
};
在这种情况下,您可以通过地图获得年龄总和。
Array.prototype.sum = function(){
return this.reduce((sum,current) => sum + current,0);
};
var ages = [
{ age : 1 },
{ age : 2 },
{ age : 3 },
{ age : 4 }
];
var agesum = ages.map(arr => arr.age).sum();
console.log(agesum);