Open serendipityApe opened 2 years ago
题目 基于上个问题,实现一个支持占位符的curry 例子 const join = (a, b, c) => { return `${a}_${b}_${c}` }
题目 基于上个问题,实现一个支持占位符的curry 例子
const join = (a, b, c) => { return `${a}_${b}_${c}` }
const curriedJoin = curry(join) const _ = curry.placeholder
curriedJoin(1, 2, 3) // '1_2_3'
curriedJoin(_, 2)(1, 3) // '1_2_3'
curriedJoin(, , )(1)(, 3)(2) // '1_2_3'
> 答案
function curry(fn) { return function innerFunc(...args){ //如果参数都不是placeholder且长度满足,执行fn const complete=args.length >= fn.length && !args.slice(0,fn.length).includes(curry.placeholder); if(complete){ return fn.apply(this,args); }else{ return function(...next){ //依次替换上一个函数的placeholder const res=args.map(arg => arg === curry.placeholder && next.length ? next.shift() : arg); return innerFunc(...res, ...next); } } } } curry.placeholder = Symbol()
const curriedJoin = curry(join) const _ = curry.placeholder
curriedJoin(1, 2, 3) // '1_2_3'
curriedJoin(_, 2)(1, 3) // '1_2_3'
curriedJoin(, , )(1)(, 3)(2) // '1_2_3'
function curry(fn) { return function innerFunc(...args){ //如果参数都不是placeholder且长度满足,执行fn const complete=args.length >= fn.length && !args.slice(0,fn.length).includes(curry.placeholder); if(complete){ return fn.apply(this,args); }else{ return function(...next){ //依次替换上一个函数的placeholder const res=args.map(arg => arg === curry.placeholder && next.length ? next.shift() : arg); return innerFunc(...res, ...next); } } } } curry.placeholder = Symbol()