使用forEach在高阶函数中操作数组返回undefined问题排查
问题分析与修复
你的代码主要有两个关键问题,导致调用后返回undefined:
1. 函数没有返回最终结果数组
你在函数内部创建了output数组并往里面添加元素,但整个changeArray函数没有任何return语句——函数默认会返回undefined,所以调用它自然拿不到预期的数组。
2. forEach回调里的return完全无效
forEach方法不会关心回调函数的返回值,你写的return output.push(...)只是返回了push的执行结果(也就是数组的新长度),但这对forEach的执行流程没有任何影响,完全可以删掉这个多余的return。
另外,你定义了inputFunc参数但全程没用到,这个可以直接删除,或者根据后续需求补充逻辑。
修正后的代码
const array = [1, 2, 3]; function changeArray(array) { let output = []; array.forEach((ele) => { output.push(ele + 10); // 去掉无用的return }); return output; // 关键:返回最终组装好的数组 } console.log(changeArray(array)); // 输出 [11, 12, 13]
额外优化:用map更简洁高效
其实这种“遍历数组并返回转换后新数组”的场景,用map方法更合适——它专门用来做这类数组转换,不需要手动创建数组和调用push:
const array = [1, 2, 3]; function changeArray(array) { return array.map(ele => ele + 10); } console.log(changeArray(array)); // 输出 [11, 12, 13]
内容的提问来源于stack exchange,提问作者PineNuts0
相关产品推荐
相关产品推荐

