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>