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

如何实现eitherCallback函数合并两个回调以适配filterArray调用?

实现思路
  • eitherCallback属于高阶函数,核心作用是把两个回调的判断逻辑合并为一个回调:它接收两个回调函数作为入参,最终返回一个新的函数,这个新函数可以直接作为回调传入filterArray使用。
  • 新返回的回调函数的判断逻辑和此前eitherFilter中的逻辑完全对齐:只要两个入参回调中的任意一个对传入值返回真值,合并后的回调就返回true。
  • 需要注意filterArray调用回调时会传入三个参数(当前遍历元素、当前索引、原始数组),所以合并后的回调要把接收到的所有参数透传给两个原始回调,避免回调需要用到索引/原始数组时出现异常。
完整实现代码
function eitherCallback(callback1, callback2) {
  // 返回合并后的回调函数
  return function(...args) {
    // 只要任意一个回调返回真值,整体就返回true
    return callback1(...args) || callback2(...args);
  }
}

// 测试代码
function filterArray(array, callback) {
  const newArray = [];
  for (let i = 0; i < array.length; i += 1) {
    if (callback(array[i], i, array)) newArray.push(array[i]);
  }
  return newArray;
}
const arrOfNums = [10, 35, 105, 9];
const integerSquareRoot = n => Math.sqrt(n) % 1 === 0;
const over100 = n => n > 100;
const intSqRtOrOver100 = eitherCallback(integerSquareRoot, over100);
// 修正原测试代码的变量名笔误:intSqRtOver100 改为 intSqRtOrOver100
console.log(filterArray(arrOfNums, intSqRtOrOver100)); // 输出: [105, 9]
结果验证

运行上述代码后控制台会输出[105, 9],和此前eitherFilter的执行结果完全一致,符合需求。

内容的提问来源于stack exchange,提问作者Matthew Schwer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:39:02