当前位置:首页 > JavaScript

curry js实现

2026-01-31 18:25:20JavaScript

curry js实现

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

curry js实现

基本柯里化实现

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

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属性可能不符合预期,建议使用普通函数。
  • 柯里化后的函数在参数不足时会返回新函数,直到参数足够时才执行原始函数。

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

标签: curryjs
分享给朋友:

相关文章

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…