🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 1. 多种方式实现数组去重、扁平化、对比优缺点 1. 扁平化:两种方法及更多 ``` let arr = \[1,2,\[3,4\],\[5,6,\[7,\[8,9,\[10\]\]\]\]\] // 方法一:使用递归扁平化 function flat(arr) { let res = \[\] arr.forEach(item \=> { if(Array.isArray(item)) { res = res.concat(flat(item)) } else { res.push(item) } }) return res } console.log( flat(arr) ) //方法二,如果数组元素都是数字则使用toString()方法 //缺点:受限于数组内的元素只能为Number类型,场景非常有限 function flat2(arr) { return arr.toString().split(',').map(item \=> { return +item }) } console.log( flat2(arr) ) ``` #### 2. 多种方式实现深拷贝、对比优缺点 #### 3. 手写函数柯里化工具函数、并理解其应用场景和优势 #### 4. 手写防抖和节流工具函数、并理解其内部原理和应用场景 1.防抖:debounce:事件在N秒内只执行一次,如果在N秒内又触发了事件,则时间重新开始计算 ``` function debounce(fn, delay) { let first = true let timer = null return function(){ const _this = this if (first) { fn.call(_this, arguments) return } clearTimeout( timer ) timer = setTimeout( function(){ fn.call(_this, arguments) }, delay || 500) } } ``` 2.节流函数:throttle:让频繁触发的事件在指定的时间内只触发一次,比如:scroll,mousemove事件等 ``` function Throttle(fn, delay) { let first = true; let timer = null; let _fn = fn return function() { const _this = this if (first) { _fn.call(_this, arguments) first = false return } if (timer) return timer = setTimeout(() => { clearTimeout(timer) timer = null _fn.call(_this, arguments) }, delay || 1000) } } ``` #### 5. 实现一个sleep函数