如何用单个函数统计数组中在10-20区间内外的数字数量?
用单个函数统计数组中区间内/外的数字数量
你当前通过两个filter函数分别统计区间内、外数字数量的方式可行,但可以优化为单次遍历数组的实现,既减少数组遍历次数,又只用一个函数完成需求。
方法1:使用reduce高效统计
reduce方法能在遍历数组时维护一个统计对象,同时完成区间内、外的计数:
let array = [1,3,7,10,14,18,20,23,27] function countIntervalStats(arr) { return arr.reduce((stats, num) => { num >= 10 && num <= 20 ? stats.inCount++ : stats.outCount++ return stats }, { inCount: 0, outCount: 0 }) } const { inCount, outCount } = countIntervalStats(array) console.log(inCount, outCount) // 输出:5 4
这个函数仅遍历数组一次,相比两次filter的写法更高效,尤其在处理大数组时性能差异更明显。
方法2:基于普通循环实现
如果你更习惯直观的循环逻辑,也可以用for...of完成单次遍历统计:
let array = [1,3,7,10,14,18,20,23,27] function getIntervalCounts(arr) { let inCount = 0 let outCount = 0 for (const num of arr) { if (num >= 10 && num <= 20) { inCount++ } else { outCount++ } } return { inCount, outCount } } const result = getIntervalCounts(array) console.log(result.inCount, result.outCount) // 输出:5 4
补充:原有写法的小优化
你的inInterval和outInterval函数可以简化——filter只需要返回布尔值,无需返回元素本身,比如:
function inInterval(e){ return e >= 10 && e <=20 }
内容的提问来源于stack exchange,提问作者Delboni
相关产品推荐
相关产品推荐

