扁平化嵌套数组/flat实现
描述:将嵌套多层的数组展开平铺成只有一层的数组。
1 | let array = [1, [1, 2, 3], [1, [2, {}]] ] |
方法一:
1 | const handle = array => JSON.parse(`[${JSON.stringify(array).replace(/\[|]/g,'')}]`) |
知识点:JSON.parse()/JSON.stringify()
、String.prototype.replace()
方法二:
1 | const handle = array => array.reduce((accumulator, currentValue) => accumulator.concat(Array.isArray(currentValue) ? handle(currentValue): currentValue), []) |
知识点:Array.prototype.reduce()
、Array.prototype.concat()
方法三:
1 | const handle = array => { |
知识点:while
、Array.prototype.some()
、剩余参数
其它方法:……
数组去重
描述:将数组中重复的元素过滤掉。
1 | let array = [1, 2, 1, '3', '3', 0 , 1] |
方法一:
1 | const handle = array => [...new Set(array)] |
知识点:Set
方法二:
1 | const handle = array => array.reduce((accumulator, currentValue) => { |
知识点:Array.prototype.includes()
方法三:
1 | const handle = array => { |
知识点:Map
、Array.prototype.filter()
其它方法:……
模拟bind实现
1 | Function.prototype.bind = function () { |
知识点:apply、call、bind
模拟Call实现
1 | Function.prototype.Call = function(){ |
模拟New实现
1 | const handle = function() { |
知识点:Object.create()
格式化数字
1 | const num = 123456789; |
知识点:正则表达式
、String.prototype.replace()
回文判断
1 | const num = 123456654321; |
知识点:String.prototype.split()
、Array.prototype.join()
函数节流
定时器
1 | const handle = (fn, interval) => { |
时间戳
1 | const handle = (fn, interval) => { |
函数防抖
1 | const handle = (fn, delay) => { |
函数节流、函数防抖区别:函数节流和函数防抖较容易混淆,可以这么比喻,对于函数节流,门外有人频繁敲门,但是门卫按固定时间来决定是否开门。对于函数防抖,门外有人频繁敲门,门卫按最后一次敲门来决定是否开门。
深拷贝
1 | const handle = function deepClone(params) { |
发布订阅模式
1 | class Pubsub { |
偏函数
1 | const partial = |
柯里化
1 | const curry = |
函数组合
1 | var compose = |
简易模块依赖管理器
1 | const moduleManage = (() => { |
Promise化
1 | var promise_wrap = fn => function(){ |
对象可迭代
1 | Object.prototype.Iteration = function(){ |
生成器自执行器
1 | const generator_wrap = function (generator) { |