常用算法
二分查找
|
|
快速排序
|
|
归并排序
|
|
数组扁平化
|
|
函数节流和防抖
防抖的原理就是:你尽管触发事件,但是我一定在事件触发 n 秒后才执行,如果你在一个事件触发的 n 秒内又触发了这个事件,那我就以新的事件的时间为准,n 秒后才执行,总之,就是要等你触发完事件 n 秒内不再触发事件,我才执行。
节流的原理很简单:
如果你持续触发事件,每隔一段时间,只执行一次事件。
根据首次是否执行以及结束后是否执行,效果有所不同,实现的方式也有所不同。我们用leading代表首次是否执行,trailing代表结束后是否再执行一次。
关于节流的实现,有两种主流的实现方式,一种是使用时间戳,一种是设置定时器。
1.时间戳:马上执行,delay时间后不执行
2.定时器: delay时间后执行
|
|
有头有尾
|
|
实现有头无尾或者无头有尾
leading:false 表示禁用第一次执行
trailing: false 表示禁用停止触发的回调
|
|
判断是否为数字
|
|
事件中心
|
|
Lazyman的实现
|
|
HTML5拖拽实现
|
|
原生ajax的实现
|
|
Promise模拟实现
|
|
call和apply的模拟实现
call()方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。
apply功能与call一致,函数产地的参数是数组形式
bind的模拟实现
bind() 方法会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。(来自于 MDN )
|
|
new的模拟实现
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一
数组去重
双层循环
|
|
indexOf
|
|
排序后去重
|
|
unique API
|
|
Array.filter
|
|
Object键值对
|
|
ES6
|
|
|
|
方法 | 结果 | 说明 |
---|---|---|
for循环 | [1, “1”, null, undefined, String, String, /a/, /a/, NaN, NaN] | 对象和 NaN 不去重 |
indexOf | [1, “1”, null, undefined, String, String, /a/, /a/, NaN, NaN] | 对象和 NaN 不去重 |
排序去重 | [/a/, /a/, 1, “1”, String, String, NaN, NaN, null, undefined] | 对象和 NaN 不去重 |
filter + indexOf | [1, “1”, null, undefined, String, String, /a/, /a/] | 对象不去重 NaN 会被忽略掉 |
优化后的键值对方法 | [1, “1”, null, undefined, String, /a/, NaN] | 全部去重 |
Set、Map | [1, “1”, null, undefined, String, String, /a/, /a/, NaN] | 对象不去重 NaN去重 |
类型判断
|
|
EmptyObject
|
|
Window对象
|
|
isArrayLike
|
|
isElement
|
|
深浅拷贝
简单的数组深浅拷贝
|
|
浅拷贝
|
|
深拷贝
|
|
Jquery的extend
定义:合并两个或者更多的对象的内容到第一个对象中
求数组的最大值和最小值
reduce
|
|
apply
|
|
ES6
|
|
Flatten
reduce
|
|
ES6 flat的模拟
|
|
数组中查找指定元素
findIndex
|
|
findLastIndex
|
|
createIndexFinder
|
|
sortedIndex
在一个排好序的数组中找到value对应的位置,保证插入数组后,依然保持有序的状态。
|
|
createIndexOfFinder
indexOf 方法也可以多传递一个参数 fromIndex,从 MDN 中看到 fromIndex 的讲究可有点多:
设定开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回 -1。如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即 -1 表示从最后一个元素开始查找,-2 表示从倒数第二个元素开始查找 ,以此类推。 注意:如果参数中提供的索引值是一个负值,仍然从前向后查询数组。如果抵消后的索引值仍小于 0,则整个数组都将会被查询。其默认值为 0。
lastIndexOf 的 fromIndex:
从此位置开始逆向查找。默认为数组的长度减1,即整个数组都被查找。如果该值大于或等于数组的长度,则整个数组会被查找。如果为负值,将其视为从数组末尾向前的偏移。即使该值为负,数组仍然会被从后向前查找。如果该值为负时,其绝对值大于数组长度,则方法返回 -1,即数组不会被查找。
ES5实现ES6的class
es6的代码:
|
|
es5实现
|
|