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数组中查找年龄。
答案 0 :(得分:4)
在您的示例中,您需要提供Array.protoype.reduce()
的起始值,在您的情况下为0
。
newPerson.reduce((total, a) => total + a.age, 0)
或者你可以跳过起始编号并使用total || 0
并且最初不满足0
,但我不推荐它。
你得到NaN
的原因是因为第二次迭代你试图查找一个对象的属性(一旦从一个原语中自动装箱),它不存在,给你undefined + <Number>
。如果您的阵列只有2个成员,那么它将与一样的原因相同。
如果未提供
initialValue
,则previousValue
将等于 数组中的第一个值currentValue
将等于 第二
另请注意,这些方法不会改变原始数组,因此您目前使用的代码会丢弃结果(尽管您有输出结果,所以也许您已经知道并且您已经在REPL中了)。
答案 1 :(得分:2)
只需给出reduce的起始值并更改其中的第一个参数。
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;
答案 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);