纯手写实现节流、防抖、递归(深拷贝)、转换树形数据
节流
节流:顾名思义就是在一段时间内只执行第一次。
代码实现:
function throttle(fn,time){
let timer = null
return function(){
if(!timer){
timer = setTimeout(function(){
fn()
// 此处如果使用clearTimeut()是清除不掉延时器的只能赋值为null
timer = null
},time)
}}
}
防抖
防抖:在一段时间内只执行最后一次
代码实现:
function debounce(fn,time){
let timer = null
return function(){
if(timer) clearTimeout(timer)
timer = setTimeout(function(){
fn()
},time)
}
}
递归实现深拷贝
代码实现:
function cloneDeep(obj){
let newObj = Array.isArray(obj) ? [] : {}
for(let k in obj ){
if(typeof obj[k] === "object"){
newObj[k] = cloneDeep(obj[k])
}else {
newObj[k] = obj[k]
}
}
return newObj
}
实现树形数据
代码实现:
function getChild(arr,pid){
let newArr = []
arr.forEach(item=>{
if(item.pid === pid){
if( getChild(item.id).length > 0){
item.children = getChild(arr,item.id)
}
newArr.push(item)
}
})
return newArr
}