1.扁平化数组
巧用reduce,[reduce]方法为数组中的每个元素按序执行一个reducer
函数,每一次运行 reducer 会将先前元素的计算结构作为参数传入,最后将其结果汇总为单个返回值
function checkType(obj)=> Object.prototype.toString.call(obj).toLocaleLowerCase().slice(8,-1)
function flatter(arr){
if(checkType(arr)!="array"){
return
}
return arr.reduce((old,curr)=>{
if(checkType(curr)=="array"){
return old.concat(flatter(curr))
}else{
return old.concat(curr)
}
},[])
}
var arrl=[1,2,[3,4,[5,6,[7,8]],9],0] // [1,2,3,4,5,6,7,8,9,0]
2.节流和防抖
防抖和节流的区别:
防抖:n秒内多次触发,重新计算时间,理念:每次触发都取消原来的调用方法, 执行新的调用方法
节流:n秒内触发,只执行一次,会稀释函数的执行频率,理念:每次触发都判断是否有等待执行的演示函数,有就等待,没有触发
区别: 节流将多次执行变成隔一段时间执行,防抖:将多次执行变成最后一次执行
// 防抖
function debounce(func,time){
let timer=null;
return funtion(){
if(timer) clearTimeout;
timer=setTimeout(()=>{
func.apply(this,arguments)
},time)
}
}
// 节流
function throttle(func,time){
let timer =null;
return function(){
if(!timer){
timer = setTimeout(()=>{
fun.apply(this,arguments)
timer=null
},time)
}
}
}