JavaScript 函数珂里化

JavaScript 函数珂里化

为什么需要珂里化

在函数式编程中,我们想尽可能地让一个函数处理的问题尽可能单一,而不是在一个函数中处理大堆问题。
珂里化就是将每次传入的参数在单一的函数中进行处理,处理完后在下一个函数中再使用处理后的结果。

举例

例子1

已知参数个数为3,实现 add 方法,使得 add(1)(2)(3) 输出结果为 6

function add(x) {
    return function (y) {
      return function (z) {
        return x + y + z;
      };
    };
  }
  console.log(add(1)(2)(3));//6
  
//使用箭头函数简写方式:
let add2 = (x) => (y) => (z) => x + y + z;
console.log(add2(1)(2)(3));//6

例子2

实现方法 add,不限参数,不限格式,使得
add(1)(2)(3)(4)=10;
add(1)(1,2,3)(2)=9;

function add() {
  let arg = [...arguments]; //arguments 伪数组转成数组
  //获取所有参数
  let fn = function () {
    arg.push(...arguments);
    return fn;
  };
  //所有参数相加
  fn.toString = function () {
    let res = arg.reduce((pre, cur) => {
      return pre + cur;
    });
    return res;
  };
  return fn;
}

let res1 = add(1)(2)(3)(4);
let res2 = add(1)(1, 2, 3)(2);
console.log(+res1); //需要进行一个隐性转换才能调用 toString 方法进行相加
console.log(+res2);

例子3

珂里化实现查找由对象组成地数组里面某个属性所有的值;

let nameList1 = [
  { name: "hello", age: 12 },
  { name: "Pink", age: 30 },
  { name: "Mike", age: 23 },
];
let nameList2 = [
  { acd: "车轮", profession: "ADC" },
  { acd: "辐条", profession: "ADC" },
  { acd: "方向盘", profession: "ADC" },
];

let curring = (key) => (element) => element[key];
let findName = curring("name");
let findAcd = curring("acd");
console.log(nameList1.map((item) => findName(item))); //[ 'hello', 'Pink', 'Mike' ]
console.log(nameList2.map((item) => findAcd(item)));    //[ '车轮', '辐条', '方向盘' ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值