当前位置:首页 > JavaScript

curry js实现

2026-01-31 18:25:20JavaScript

curry js实现

在JavaScript中,柯里化(Curry)是一种将多参数函数转换为一系列单参数函数的技术。柯里化后的函数可以逐步接收参数,直到所有参数都被收集完毕,最后返回结果。

curry js实现

基本柯里化实现

以下是一个简单的柯里化函数实现:

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function(...args2) {
        return curried.apply(this, args.concat(args2));
      };
    }
  };
}

使用示例

function add(a, b, c) {
  return a + b + c;
}

const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3)); // 6
console.log(curriedAdd(1, 2)(3)); // 6
console.log(curriedAdd(1)(2, 3)); // 6

支持占位符的柯里化

如果需要支持占位符(如_)来跳过某些参数的传递,可以使用以下实现:

function curryWithPlaceholder(fn) {
  return function curried(...args) {
    const complete = args.length >= fn.length && !args.includes(curryWithPlaceholder.placeholder);
    if (complete) {
      return fn.apply(this, args);
    } else {
      return function(...args2) {
        const mergedArgs = args.map(arg => 
          arg === curryWithPlaceholder.placeholder && args2.length ? args2.shift() : arg
        ).concat(args2);
        return curried.apply(this, mergedArgs);
      };
    }
  };
}

curryWithPlaceholder.placeholder = Symbol('_');

使用示例(带占位符)

function multiply(a, b, c) {
  return a * b * c;
}

const curriedMultiply = curryWithPlaceholder(multiply);
const _ = curryWithPlaceholder.placeholder;

console.log(curriedMultiply(2)(3)(4)); // 24
console.log(curriedMultiply(_, 3)(2)(4)); // 24
console.log(curriedMultiply(2, _, 4)(3)); // 24

注意事项

  • 柯里化函数的参数数量由原始函数的length属性决定,因此需确保原始函数有明确的参数列表。
  • 箭头函数的length属性可能不符合预期,建议使用普通函数。
  • 柯里化后的函数在参数不足时会返回新函数,直到参数足够时才执行原始函数。

以上实现可以满足大多数柯里化需求,根据具体场景可以选择基本版本或支持占位符的版本。

curry js实现

标签: curryjs
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 //…

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的H…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Pa…