查找 JSON 数组中的年龄总和

问题描述 投票:0回答:4
  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 方法来查找人员数组中的年龄。

javascript
4个回答
4
投票

在您的示例中,您需要提供

Array.protoype.reduce()
的起始值,在您的情况下为
0

newPerson.reduce((total, a) => total + a.age, 0)

或者,您可以跳过起始编号并使用

total || 0
并满足最初不通过
0
的要求,但我不推荐这样做。

您得到

NaN
的原因是因为您在第二次迭代中尝试查找不存在的对象(一旦从原语自动装箱)上的属性,从而给您
undefined + <Number>
。这也是同样的原因,如果你的数组只有 2 个成员,它会按原样工作。

如果未提供
initialValue

,则

previousValue
将等于 数组中的第一个值和
currentValue
将等于 第二个。


来源

另请注意,这些方法不会改变原始数组,因此您当前拥有的代码会丢弃结果(尽管您在那里有输出,所以也许您已经知道这一点并且您处于 REPL 中)。


2
投票

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


0
投票

var sum=0; for(var i=0;i<people.length; i++) { sum+= people[i].age; }



0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.