ES6:高級數組函數,filter/map/reduce


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循環都可以做出來,為什么要用新的技術呢?請看下面的這句話:

reduce()方法可以搞定的東西,for循環,或者forEach方法有時候也可以搞定,那為啥要用reduce()?這個問題,之前我也想過,要說原因還真找不到,唯一能找到的是:通往成功的道路有很多,但是總有一條路是最捷徑的,亦或許reduce()逼格更高...

另外,我這里僅僅只涉獵了我常用的方法。這里面還有一些其他的騷操作,這里就不一一贅述了,想要知道的話,可以去百度。

最后把我全部的代碼都貼在下面,方便大家自己執行:

<!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>

  

轉載自:https://www.cnblogs.com/daniao11417/p/12856527.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM