求修正接收数组与两个回调的JavaScript函数,返回符合预期的新数组
修正后的JavaScript函数实现
原代码的问题在于使用了逻辑与运算符&&,当两个回调结果均为真值时,它会返回第二个回调的执行结果,这和期望的交替返回两个回调结果的行为不符。同时原代码没有明确体现“仅当两个回调结果均为真时才返回对应结果”的判断逻辑。
修正后的代码如下:
let myMap = function(array, cb1, cb2) { let result = [] for (let i = 0; i < array.length; i++) { const cb1Result = cb1(array[i]); const cb2Result = cb2(array[i]); // 验证两个回调结果是否均为真 if (cb1Result && cb2Result) { // 根据索引奇偶性选择对应的结果加入数组 result.push(i % 2 === 0 ? cb1Result : cb2Result); } } return result }
测试验证
使用你提供的测试代码:
let triple = function (n) { return 3 * n; }; let half = function (n) { return n / 2; }; console.log(myMap([7, 3, 2, 9, 8], triple, half)); // 输出:[ 21, 1.5, 6, 4.5, 24 ]
这段代码的逻辑是:
- 对数组中的每个元素,先执行两个回调函数得到结果;
- 检查两个结果是否都为真值(非
false、0、""、null、undefined、NaN); - 若均为真,则根据元素索引的奇偶性选择对应回调的结果加入数组:偶数索引(0、2、4)用第一个回调的结果,奇数索引(1、3)用第二个回调的结果;
- 若任一结果为假,则跳过该元素(不加入结果数组)。
内容的提问来源于stack exchange,提问作者MuCloud
相关产品推荐
相关产品推荐

