写项目时,通常都会建一个utils
文件夹用于存放工具类,这篇博客就来总结一下一些常用的utils
的手写方法
深拷贝 deepClone
const deepClone = (obj: any) => {
if(typeof obj === "object") {
// 创建一个新对象,避免直接引用原来的对象
let newObj: any = Array.isArray(value) ? [] : {}
// for in 循环既可以遍历对象,也可以遍历数组
for(const key in newObj) {
newObj[key] = deepClone(newObj[key])
}
return newObj
}
return obj
}
防抖 debounce
const debounce = (func: function, time: number) => {
// 闭包,保存一个变量,用于每次触发防抖函数时清理之前的定时器
const timer: any = null
return function (...args) {
clearTimeout(timer)
timer = setTimeout(() => func(args), number)
}
}
节流 throttle
const throttle = (func: function, time: number) => {
// 保存上一次的调用时间
let last: Date = null
return function(...args) {
const now = new Date()
// 如果没有调用过,或者调用的时间间隔大于设置的最小时间间隔,才可以调用
if(last === null || now - last > time) {
func(args)
last = now
}
}
}