实现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