實現map,filter方法


實現map:

 <script>
    /* 
      實現map()迭代方法
      思路:
      對於每一項執行的函數
        接收3個參數 : 數組項的值, 數組項的下標, 數組對象本身
      指定this的作用域
      返回每次函數調用結果組成的數組.
      arr.map(function(item,index,arr) {}, obj)
      第二個參數obj 可選;
     */

     Array.prototype.myMap = function(fn, obj) {
      if(typeof fn !== 'function') {
         throw new TypeError(`${fn} is not a function`)
       }
      // 原數組
       const array = this;
       obj = Object(obj) || global;//嚴格模式下
      // 返回結果數組
       const resultArr = [];
       var result;
      //  迭代執行
       for(let i = 0; i < array.length; i++) {
         let item = array[i];
         result = fn.call(obj, item, i, array)
         resultArr.push(result);
       }
       return resultArr;
     }

     var arr = [1, 2,3 ,11, 33];
     var resultArr = arr.myMap(function(item,index, arr) {
       return item + 10;
     })
     console.log(resultArr);//[11, 12, 13, 21, 43]
  </script>

實現filter方法

 /* 
      實現filter() 方法
        對於每一項執行的函數
          接收3個參數: 該數組項的值, 該數組項的下標, 該數組本身對象
      指定this的作用域對象
      filter() 方法返回執行結果為true的項組成的數組
      arr.filter(function(item,index, arr){}, obj)
      第二個參數obj 可選;
     */
     Array.prototype.myFilter = function(fn, obj) {
       if(typeof fn !== 'function') {
         throw new TypeError(`${fn} is not a function`)
       }

      obj = Object(obj) || window;
      //  原數組
       let arr = this;
      //  返回結果數組
       let resultArr = [];
       let result = false;
      // 迭代返回值為true的項的組合
       for(let i = 0; i < arr.length; i++) {
         result = fn.call(obj, arr[i], i, arr);
         if(result) {
           resultArr.push(arr[i]);
         }
       }
       return resultArr;
     }

     var arr = [1, 2, 3, 11, 13];
     var resultArr = arr.myFilter(function(item, arr){
       return item > 5
     })
     console.log(resultArr);//[11, 13]

 


免責聲明!

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



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