在JSON数组中查找年龄总和

时间:2016-04-20 07:35:40

标签: javascript

  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方法在people数组中查找年龄。

3 个答案:

答案 0 :(得分:4)

在您的示例中,您需要提供Array.protoype.reduce()的起始值,在您的情况下为0

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

或者你可以跳过起始编号并使用total || 0并且最初不满足0,但我不推荐它。

你得到NaN的原因是因为第二次迭代你试图查找一个对象的属性(一旦从一个原语中自动装箱),它不存在,给你undefined + <Number> 。如果您的阵列只有2个成员,那么它将与一样的原因相同。

  

如果未提供initialValue,则previousValue将等于   数组中的第一个值currentValue将等于   第二

Source

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

答案 1 :(得分:2)

只需给出reduce的起始值并更改其中的第一个参数。

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

只需循环遍历数组

x = (V2.x * V1.x + V2.y * V1.y + V2.z * V1.z) /
    (V1.x * V1.x + V1.y * V1.y + V1.z * V1.z);