如何用JavaScript的Filter和Reduce函数筛选数组中大于平均值的元素
用Filter和Reduce筛选数组中大于平均值的元素
嘿,刚入门JavaScript又刚加入Stack Overflow的你好呀!你的思路其实已经很对了——先算出数组平均值,再用filter筛选符合条件的元素。不过既然你提到要用到Filter和Reduce这两个函数,我们可以把计算平均值的部分用reduce来优化,让代码更贴合函数式编程的风格。
首先,我们针对你给出的目标数组[7, 5, 6, 1, 3, 7]来实现:
完整实现代码
const values = [7, 5, 6, 1, 3, 7]; // 用Reduce计算数组总和,再得到平均值 const average = values.reduce((sum, current) => sum + current, 0) / values.length; // 用Filter筛选出大于平均值的元素 const aboveAverageValues = values.filter(num => num > average); console.log('Average = ' + average); console.log('Elements above average:', aboveAverageValues);
代码解释
- Reduce部分:
reduce函数接收两个参数——一个回调函数和初始值(这里初始值设为0)。回调函数里的sum是累计的总和,current是当前遍历到的数组元素,每次迭代都会把当前元素加到总和里,最后得到整个数组的总和,再除以数组长度就得到平均值。 - Filter部分:
filter函数会遍历数组,只保留回调函数返回true的元素,这里就是判断每个元素是否大于我们刚算出的平均值。
对比你原来的代码,用reduce替代for循环后,代码更简洁,也完美贴合你要求的使用Filter和Reduce的需求。你的原始代码逻辑是完全正确的,只是换了一种更函数式的写法~
内容的提问来源于stack exchange,提问作者Breno Araripe
相关产品推荐
相关产品推荐

