#### 數組去重
```
var result = Array.from(new Set(arr));
```
```
for(var i = 0; i < arr.length - 1; i++) {
for(var j = i + 1; j < arr.length; j++) {
if(arr[j] === arr[i]) arr.splice(j--, 1);
}
}
console.log(arr);
```
```
var result = [];
for(var i = 0; i < arr.length; i++) {
if(result.indexOf(arr[i]) < 0) result.push(arr[i]);
}
console.log(result);
```
#### 函數節流(不想讓函數觸發太快)
resize\mousemove\scroll等函數,不希望觸發太快,最好隔一陣子才觸發。
```
throttling(func, time) {
//第一次則立即執行
if(typeof func.id === undefined) {
func.id = 0;
func();
return
}
//之后每次都是定時器結束后才執行
if(!func.id) {
func.id = setTimeout(() => {
func();
func.id = 0
}, time)
}
}
$(window).on("resize", function() {
throttling(someFunc, 500);
});
```
#### 函數防抖
```
function _debounce(fn,wait,time){
var previous = null; //記錄上一次運行的時間
var timer = null;
return function(){
var now = +new Date();
if(!previous) previous = now;
//當上一次執行的時間與當前的時間差大于設置的執行間隔時長的話,就主動執行一次
if(now - previous > time){
clearTimeout(timer);
fn();
previous = now;// 執行函數后,馬上記錄當前時間
}else{
clearTimeout(timer);
timer = setTimeout(function(){
fn();
},wait);
}
}
}
function _log(){
console.log(1)
}
window.onscroll = _debounce(_log,500,2000)
```
函數防抖是只執行重復操作的最后一次(當調用動作過n毫秒后,才會執行該動作,若在這n毫秒內又調用此動作則將重新計算執行時間),而節流是每多少單位時間內只執行一次(預先設定一個執行周期,當調用動作的時刻大于等于執行周期則執行該動作,然后進入下一個新周期)。