我正在尝试使用JavaScript中的Reduce功能。我想通过过滤功能轻松完成我想要实现的功能,但我试图通过Reduce来实现。
我正在尝试检索年龄大于或等于18岁的所有人并将结果存储在数组中
take
然而,当我运行此代码段时,我收到一条错误,上面写着" TypeError:无法读取属性' push'未定义"。我不知道在哪里需要定义arr(我需要存储输出的数组)
答案 0 :(得分:1)
试试这个:
您应该return arr
,而不是return arr.push(ppl)
,因为[].push(3)
返回1
(新[]
}而不是[3]
。{{1与} reduce
配合使用,在这种情况下,accumulator
为accumulator
。因此,您应该arr
而不是return arr
;
return (arr.push(ppl))

答案 1 :(得分:0)
return(arr.push(ppl));
当arr.push
返回数组的新长度时,它将返回一个数字。所以在下一次迭代arr
将是一个数字,你不能推动它。所以你需要传递数组:
const output = people.reduce((arr, person) => person.age > 17 ? arr.concat(person): arr, []);
那就像arr.concat
一样返回一个数组。
答案 2 :(得分:0)
您可以使用array.concat推送到数组并返回它,并将其放入三元运算符中:
let people=[{name:"John",age:16},{name:"Thomas",age:20},{name:"Smith",age:18},{name:"Jessy",age:17}]
let output = people.reduce((arr,ppl) => {
return ppl.age >= 18 ? arr.concat(ppl) : arr
},[])
console.log(output)