为何自定义JavaScript myFilter函数返回布尔数组而非过滤后的数组?
自定义myFilter函数返回布尔数组的原因及修复方案
问题原因
你当前的myFilter逻辑存在错误:循环时直接把回调函数func(el)的返回值(也就是el > 3这类判断产生的布尔值)push进了结果数组,完全没做「布尔值为true时才保留原元素」的判断,自然返回的是一堆布尔值,而非过滤后的原数组元素。
修复后的代码
补充判断逻辑,只有当回调返回true时,才将当前元素加入结果数组:
function myFilter(arr, func) { const result = []; for (let el of arr) { // 先判断回调返回值,为true时才push原元素 if (func(el)) { result.push(el); } } return result; }
测试验证
调用你提供的示例:
myFilter([2, 5, 1, 3, 8, 6], function(el) { return el > 3 })
此时会正确返回[5, 8, 6],符合预期。
内容的提问来源于stack exchange,提问作者orso
相关产品推荐
相关产品推荐

