使用forEach模拟array.map()函数时结果异常,求排查解决
问题分析与修正方案
嘿,我来帮你搞定这个问题!你的思路是对的——用forEach模拟map的功能,但代码里有两个关键小问题,导致结果和预期不符:
1. 自定义map函数未接收必要参数
你调用map(numbers, function(number) { ... })时传了两个参数:要处理的数组和回调函数,但你的map函数根本没声明这两个参数!这就导致函数里用的numbers是全局的那个数组,而且完全没用到你传入的回调函数。
2. 未调用回调函数处理数组元素
在forEach的回调里,你只是把原数组的元素直接push到新数组里,完全没让传入的回调函数发挥作用——这就是为什么输出还是原数组[1,2,3],而不是乘2后的结果。
修正后的完整代码
var map = function(arr, callback) { var empMap = []; arr.forEach(function(number) { // 调用传入的回调函数处理当前元素,再把结果push到新数组 empMap.push(callback(number)); }); return empMap; } var numbers = [1, 2, 3]; var doubles = map(numbers, function(number) { return number * 2; }); console.log(doubles); // 现在会输出预期的 [2, 4, 6]
修正后运行逻辑
- 调用
map时,传入目标数组numbers和“元素乘2”的回调函数; map函数内部用forEach遍历传入的数组;- 对每个元素,调用传入的回调函数处理,把处理后的结果存入新数组
empMap; - 遍历完成后返回新数组,最终得到
[2,4,6]。
内容的提问来源于stack exchange,提问作者user6488504
相关产品推荐
相关产品推荐

