为什么统计数组元素次数的JavaScript函数selector返回undefined?
问题原因
JavaScript 中所有函数如果没有显式声明 return 返回值,默认会返回 undefined,这是语言层面的固定规则。你编写的 selector 函数虽然内部已经通过 forEach 遍历统计出了数字2的出现次数存在 counter 变量里,但没有写返回语句把这个结果抛出,所以调用函数的时候自然拿不到统计值。
修复方案
你只需要在遍历结束后加一行 return counter 即可,修正后的代码如下:
const arr = [1, 1, 2, 1, 2, 1] const selector = function (arr) { let counter = 0; arr.forEach(element => { if (element == 2) { counter += 1; } }); // 新增返回语句 return counter; } // 调用测试,输出结果为2 console.log(selector(arr))
其他更简洁的实现方式
如果需要简化代码,也可以用数组自带的方法直接统计,不需要手动维护计数器:
- 用
filter方法:
const selector = arr => arr.filter(item => item === 2).length
- 用
reduce方法:
const selector = arr => arr.reduce((count, item) => item === 2 ? count + 1 : count, 0)
内容的提问来源于stack exchange,提问作者skydream
相关产品推荐
相关产品推荐

