算法分享

37 阅读1分钟

展平一个数组,数组最多是二维[[3,4],[6]]=>[1,2,3,4]

const flattenOnce = (arr) => {
   return  [].concat(...arr)
}

展平一个数组,[[1,2],3,[[4],5]]=>[1,2,3,4,5]

image.png

const flatten = (arr) => {
  return [].concat(...arr.map((n) => (Array.isArray(n) ? flatten(n) : n)))
}

函数节流

image.png

const throttle = (func, delay = 60) => {
  let lock = false
  return (...args) => {
    if (lock) return
    func(...args)
    lock = true
    setTimeout(() => {
      lock = false
    }, delay)
  }
}

image.png


const throttle = (func, delay = 300, I = null) => {
  return (...args) => {
    clearInterval(I)
    I = setInterval((...args) => func(...args), delay)
  }
}

柯里化函数

image.png


const curry = (func) => {
  const g = (...allArgs) =>
    allArgs.length >= func.length
      ? func(...allArgs)
      : (...args) => g(...allArgs, ...args)
  return g
}

function curry(func) {
  return function curried(...allArgs) {
    if (allArgs.length >= func.length) {
      return func.apply(this, allArgs)
    } else {
      return function (...args) {
        return curried.apply(this, args.concat(allArgs))
      }
    }
  }
}