出去打工和儿子租房
  • 重寫JavaScript中的join()和find()方法

    2021-12-30 11:04發布

    一、join()相關介紹

    1.方法介紹:

    arr.join(separator ):方法用于把數組中的所有元素放入一個字符串。

    元素是通過指定的分隔符進行分隔的。如果省略,則數組元素用逗號分隔。

    2.重寫思路使用如下:

    (1)可以先判斷數組中是否存在null或者undefined,若存在對其進行相應的處理。

    (2)判斷函數是否進行傳參,用arguments對象查看函數參數的情況。arguments.length用來查看傳遞參數的個數;arguments[i]是用來查看參數的值。

    (3)存在參數,說明需要我們使用傳遞過來的參數進行分割,不存在參數默認使用 “,” 將數組中的數據分割開來。

    3.代碼:

    <script>
        Array.prototype.newJoin = function () {
            var string = "";
            for (var i = 0; i < this.length; i++) {
                // 判斷數組中是否存在null或者undefined,若存在將其變成空字符
                if (this[i] === null || this[i] === undefined) {
                    //將數組中null和undefined元素變成空字符
                    this[i] = "";
                }
                // 判斷是否傳參過來,arguments對象表示函數參數的屬性,arguments.length求出函數參數的個數,arguments[i]表示某一個參數
                if (arguments.length == 1 && arguments[0] != undefined) {
                    string += (i < this.length - 1) ? this[i] + arguments[0] : this[i];
     
                }
                // else表示不傳參的情況,默認我們的join函數是使用“ , ”
                else {
                    string += (i < this.length - 1) ? this[i] + "," : this[i];
     
                }
            }
            return string;
        }
        var arr = [1, 5, 11, 56, 44, 77, 96];
        var arr2 = [1,88,46];
        var str = arr.newJoin();//1, 5, 11, 56, 44, 77, 96
        var str2 = arr2.newJoin("//");//1//88//46
        console.log(str);
        console.log(str2);
    </script>

    二、find()相關介紹

    1.方法介紹:

    find() 方法返回通過測試(函數內判斷)的數組的第一個元素的值。

    find() 方法為數組中的每個元素都調用一次函數執行:

    • 當數組中的元素在測試條件時返回 true 時,find() 返回符合條件的元素,之后的值不會再調用執行函數。

    • 如果沒有符合條件的元素返回 undefined

    注意: find() 對于空數組,函數是不會執行的。

    注意: find() 并沒有改變數組的原始值。

    2.重寫思路如下:

    (1)在重寫的find()方法外寫一個方法fnB(),該方法是我們查找的依據

    (2)根據fnB()在重寫的find()方法中進行for循環進行判斷是否為想要的結果,如果是則返回該值

    3.代碼:

    <script>
        Array.prototype.newFind=function(fun){
           //判斷參數是否為函數不是的話拋出錯誤
           if(typeof fun!="function"){
              throw new TypeError(`${fun}not a function`)
        }
        for(let i=0;i<this.length;i++){
         // arr.newFind||this指向調用newFind的arr
           if(fun(this[i])){
               return this[i];
          }
         }
        }
        var arr=[1,4,15,55,16,33];
        const val=arr.newFind(function(value){
            return value>55;
        })
        console.log(val);//undefined沒有大于55的元素
    
    </script>



    出去打工和儿子租房