filter :先看一下官方的解釋:
filter() 方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。
注意: filter() 不會對空數組進行檢測。
注意: filter() 不會改變原始數組。
其實這個已經寫的很清楚了,就是,返回通過檢查的元素,並且會創建一個新的數組。先看代碼
1 let arr = [1,2,3,4,5,6,7,8,9,10];
2 let new_arr = arr.filter((n) => { console.log(n) ; return n > 5})
3 console.log(new_arr,arr)

這里可以出來,我們的打印,會把1-10都打印出來,但是new_arr中只有,大於5的元素。arr中數組也不會改變。也就是說,只有當filter中函數,返回true 的是時候,被遍歷的元素,才會放到新的數組當中。這樣其實就省了我們自己寫循環,自己創建數組,自己push了。
map:也是看下官方的解釋:
map() 方法返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值。
map() 方法按照原始數組元素順序依次處理元素。
注意: map() 不會對空數組進行檢測。
注意: map() 不會改變原始數組。
其實這個就是簡化了我們的for循環操作。同樣的是不對原數組進行操作,會生成一個新的數組,並把元素返回到新的數組中。請看代碼:
1 let new_arr_dou = new_arr.map(n => { //這里的new_arr,就是上一步的到的新數組
2 console.log(n);
3 return n*2;
4 })
5 console.log(new_arr_dou,arr);
我把大於5的數字,都變成了自己的兩倍。然后放到了一個新的數組中。請看打印結果

同樣的是先遍歷原數組中所有的元素,然后把return的元素,放到了一個新的數組中,同樣的沒有操作原數組
reduce:看下官方的解釋:
reduce() 方法接收一個函數作為累加器,數組中的每個值(從左到右)開始縮減,最終計算為一個值。
reduce() 可以作為一個高階函數,用於函數的 compose。
注意: reduce() 對於空數組是不會執行回調函數的。
這個就是計算累加,需要注意的是,這個里面需要穿兩個參數。然后返回的不是一個數組了,就是一個確定的值。廢話不多說,直接看代碼
1 let new_arr_add = new_arr_dou.reduce((total,n) => {
2 console.log(total,n);
3 return total + n;
4 },0)
5 console.log(new_arr_add,new_arr_dou);
然后看下打印的信息:

紅色框中就是total,也就是當前的已經累加的值,然后黑色框就是,咱們遍歷的元素的值。可以看到,最后返回的是一個值,也不會對原來的數組進行任何操作。
說了這么多,介紹了三個高階函數,可能有的人會問了,這個用以前的for循環都可以做出來,為什么要用新的技術呢?請看下面的這句話:
“
”
另外,我這里僅僅只涉獵了我常用的方法。這里面還有一些其他的騷操作,這里就不一一贅述了,想要知道的話,可以去百度。
最后把我全部的代碼都貼在下面,方便大家自己執行:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
let arr = [1,2,3,4,5,6,7,8,9,10];
// 把數組中大於5的篩選出來
let new_arr = arr.filter((n) => { console.log(n) ; return n > 5})
console.log(new_arr,arr)
let new_arr_dou = new_arr.map(n => {
console.log(n);
return n*2;
})
console.log(new_arr_dou,arr);
let new_arr_add = new_arr_dou.reduce((total,n) => {
console.log(total,n);
return total + n;
},0)
console.log(new_arr_add,new_arr_dou);
</script>
</html>
