JS实现flat、函数柯里化

flat

flat函数是用于数组扁平化,传入参数为扁平化层数。

该方法返回一个新数组,对原数据没有影响

flat()默认只会“拉平”一层

如果原数组有空位,flat()方法会跳过空位。

使用reduce来实现

arr.reduce(callback,[initialValue])

callbackJ可以接收四个参数。

initialValue为赋予初始值。

function myflat(arr){

    return arr.reduce((prev,cur)=>{
      return prev.concat(Array.isArray(cur)?myflat(cur):cur)
   },[])
}

console.log(myflat([1,[2,[3]]])); //[1,2,3]

柯里化

实现多个参数时候递归传参

//函数柯里化
function sumFn(a,b,c){return a+ b + c};
let sum = curry(sumFn);
console.log(sum(2)(3)(5));//10
console.log(sum(2,3)(5));//10


function curry(fn,...arg){
    let fnlen=fn.length
    let args=arg.length

    if(fnlen>args){
        //当还有参数时候 进行递归传参
        return function(...arg2){
            return curry(fn,...arg,...arg2)
        }
    }else{
        //当全部传完的时候执行该函数
       return fn(...arg)
    }
}