1. 程式人生 > 其它 >Sonar程式碼檢測工具安裝與使用及問題記錄

Sonar程式碼檢測工具安裝與使用及問題記錄

1.何為高階函式呢?

  JavaScript的函式其實都指向某個變數。既然變數可以指向函式,函式的引數能接收變數,那麼一個函式就可以接收另一個函式作為引數,這種函式就稱之為高階函式。簡單來說,就是對其他函式進行操作的函式就為高階函式。

2.下面就介紹一下在JS中常見的filter()/reduce()/map()三個高階函式

  filter()函式:是用於把Array的某些元素過濾掉,然後返回剩下的元素。它要求我們傳入一個回撥函式。且回撥函式的返回值必須是一個Boolean值,filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。

  2.2就比如說,有個需求要求出一個數組中小於100的數字:

  2.3話不多說,直接看程式碼:

<script>
        const nums = [10, 20, 30, 55, 60, 102, 105];
        let news = nums.filter((n) => {
            return n < 100;
        });
        console.log(news);
    </script>

  2.4我們再來看看傳統的做法,程式碼如下

<script>
        const nums = [10, 20, 30, 55, 60, 102, 105];
        let news 
= []; for (let i of nums) { if (i < 100) { news.push(i); } } console.log(news); </script>

 結果展示:

由上面可以看出雖然是一樣的功能,但filter()函式是非常方便的,當上面filter()函式返回值為true時,函式內部會自動將這次回撥的n加入新的陣列news當中,當為false時,函式內部會自動過濾n,所以filter函式程式碼效率也是相對於普通做法較高的。

map()函式:是指返回一個新的陣列,陣列中的元素為原始陣列呼叫函式處理後的值。map()函式用法與filter函式用法也是差不多的,也是要求我們傳入一個回撥函式。

需要注意的是:1.map()不會對空陣列進行檢測

       2.map()不會改變原始陣列

還是老樣子:看需求實現功能:要求把陣列中小於100的數乘以2

程式碼如下:

 <script>
        const nums = [10, 20, 30, 55, 60, 102, 105];
        let news = nums.filter((n) => {
            return n < 100;
        });
        let news2 = news.map((n) => {
            return n * 2
        })
        console.log(news);
        console.log(news2);
    </script>

結果如下:

reduce()函式:是要我們傳入兩個引數如(callback,[initialValue]),reduce 為陣列中的每一個元素依次執行回撥函式,不包括陣列中被刪除或從未被賦值的元素,其中回撥函式callback中接受四個引數:1.初始值(或者上一次回撥函式的返回值),2.當前元素值,3.當前索引,4.呼叫 reduce 的陣列 。而[initialValue])是(作為第一次呼叫 callback 的第一個引數。)

簡單一點來說,這個函式就是對陣列中所有的內容進行彙總,如全部相加,相乘等。

老樣子,看需求實現一個數組所有數相加的和:

<script>
        const nums = [10, 20, 40, 50, 60];
        let total = nums.reduce((preValue, n) => {
            return preValue + n;
        }, 0);
        console.log(total);
        //第一次:preValue 0 n 10
        //第一次:preValue 10 n 20
        //第一次:preValue 30 n 40
        //第一次:preValue 70 n 50
        //第一次:preValue 120 n 60
    </script>

結果如下:

 

總結:網上的帖子大多都是深淺不一,甚至有些前後矛盾,這個文章都是本人學習過程中的總結,如果發現錯誤,歡迎各位大佬留言指出,謝謝大家

參考視訊資料:https://www.bilibili.com/video/BV15741177Eh?p=46&share_source=copy_web的第P45集