给定JS的each与filter函数,如何编写回调输出每个布尔值?
编写回调函数输出每个元素对应的布尔值
首先,先把你提供的代码整理成更易读的格式,方便理解逻辑:
// 遍历集合(数组/对象)的each函数 var each = function(collection, callback){ if(Array.isArray(collection)){ for(var i=0;i<collection.length;i++){ callback(collection[i]); } }else{ for(var key in collection){ callback(collection[key]); } } }; // 筛选集合的filter函数(目前存在小问题,后面会补充说明) var filter = function(collection, callback){ each(collection, function(item){ if(callback(item)){ return item; } }); };
根据你的需求——针对数组[1,2,3,4,5]输出false, true, false, true, false,本质是要对每个元素做奇偶判断并输出对应布尔值。你的each函数已经帮我们搞定了遍历逻辑,只需要写一个回调函数完成判断和输出即可:
步骤1:编写回调函数
这个回调函数接收每个元素,判断它是否为偶数,然后直接输出布尔值:
function checkEven(item) { const isEven = item % 2 === 0; console.log(isEven); // 输出当前元素对应的布尔值 return isEven; // 如果需要配合filter使用,可以返回结果,不影响输出逻辑 }
步骤2:用each函数调用回调
把目标数组和回调函数传给each,就能得到你想要的输出:
each([1,2,3,4,5], checkEven);
运行这段代码后,控制台会依次输出:
false true false true false
小补充:修复你的filter函数
顺便提一句,你当前的filter函数没有收集并返回筛选后的结果,如果需要它正常工作(比如返回数组中所有偶数),可以修改成这样:
var filter = function(collection, callback){ const result = []; // 用来存储符合条件的元素 each(collection, function(item){ if(callback(item)){ result.push(item); // 符合条件就加入结果数组 } }); return result; // 返回最终筛选结果 };
现在调用filter([1,2,3,4,5], checkEven)就会返回[2,4]啦。
内容的提问来源于stack exchange,提问作者seannyc7
相关产品推荐
相关产品推荐

