当前位置:首页 > JavaScript

js实现compose

2026-02-01 04:24:43JavaScript

实现 compose 函数的方法

在 JavaScript 中,compose 函数用于将多个函数组合成一个新的函数,新函数的执行顺序是从右到左。以下是几种实现 compose 的方法:

使用 reduce 实现

const compose = (...fns) => 
  fns.reduce((f, g) => (...args) => f(g(...args)));

递归实现

const compose = (...fns) => {
  const [first, ...rest] = fns.reverse();
  return (...args) => rest.reduce((res, fn) => fn(res), first(...args));
};

使用 reduceRight 实现

const compose = (...fns) => 
  fns.reduceRight((prevFn, nextFn) => 
    (...args) => nextFn(prevFn(...args))
  );

示例用法

const add5 = x => x + 5;
const multiply2 = x => x * 2;
const subtract3 = x => x - 3;

const composedFn = compose(subtract3, multiply2, add5);
console.log(composedFn(5)); // 输出: (5 + 5) * 2 - 3 = 17

实现 pipe 函数的方法

pipe 函数与 compose 类似,但执行顺序是从左到右。以下是实现方式:

js实现compose

使用 reduce 实现

const pipe = (...fns) => 
  fns.reduce((f, g) => (...args) => g(f(...args)));

示例用法

const pipedFn = pipe(add5, multiply2, subtract3);
console.log(pipedFn(5)); // 输出: ((5 + 5) * 2) - 3 = 17

注意事项

  • composepipe 的区别在于函数的执行顺序。
  • 确保传入的函数参数是可执行的,否则会抛出错误。
  • 可以结合箭头函数和剩余参数(...)简化实现。

标签: jscompose
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…