1.什么是函数柯里化?
函数柯里化是指用一个函数对另一个函数进行包装然后返回一个包装后的函数
2.函数柯里化的意义是什么?
函数柯里化的主要用途是对一些复杂的不需要每次调用函数的都需要去判断或者计算的值,
比如浏览器环境,复杂的计算得出来的一些值(最直观的例子就是VUE中patch函数做的一些操作)
3.函数柯里化的简单实现
function curry(fn , ...arr){
let curringParams = arr
return function curried (){
let params = curringParams.concat([...arguments])
if(params.length>=fn.length){
return fn(...params)
}
return curry.call(this,fn,...params)
}
}
function sum (a,b,c){
console.log(a+b+c)
return a+b+c
}
const curryingSum = curry(sum,1)
console.log(curryingSum(2,3))
4.什么是数组扁平化?
数组扁平化顾名思义是将多维数组变为一维数组
5.如何实现数组扁平化(只记录的使用reduce技巧的方式,单纯的for,if语句不记录)?
- 简单的二维数组扁平化
//只做一层处理
function normalizeArray(array){
return array.reduce((newArray,children)=> newArray.concat(children),[])
}
normalizeArray([1,2,[3,4]])
//output=>[1,2,3,4]
normalizeArray([1,2,[3,4,[5,6]]])
//output=>[1,2,3,4,[5,6]]
- 递归对多维数组进行扁平化
function recursiveNormalizeArray(array){
return array.reduce((newArray,children)=> {
if(Array.isArray(children)){
//递归调用处理多维数组
return newArray.concat(recursiveNormalizeArray(children))
}
return newArray.concat(children)
},[])
}