You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

给定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:25:35