• map、filter、forEach、reduce数组方法的封装


    1、map方法的封装


    Array.prototype.mapAlley = function(callback){
       //获取调用mapAlley这个方法的数组
       let arr = this;
       //获取this的指向,如果传递了就获取arguments中的第一个值 没有不存在则this仍然指向window
       let _this = arguments[1] || window;
       //因为mapAlley是不会操作原数组因此需要返回一个新的数组
       var newArr = []

       //遍历数据
       for(var i=0;i<arr.length;i++){
           //将callback的返回值添加到数组中去
           newArr.push(callback.call(_this,arr[i],i,arr))
      }
       return newArr;
    }

     

    2、filter方法的封装

    Array.prototype.filterAlley = function(callback){
       //获取调用filter的数组
       let arr = this;
       //判断是否传递了第二个参数
       let _this = arguments[1] || window;
       //因为不会操作原数组因此需要返回一个新的数组
       let newArr = [];



       for(var i=0;i<arr.length;i++){
           //根据callback的返回值(true)来判断当前数据是否使用
           if(callback.call(_this,arr[i],i,arr)){
               newArr.push(arr[i])
          }
      }
       return newArr;
    }

     

    3、forEach方法的封装

    Array.prototype.forEachAlley = function(callback){
       let arr = this;
       let _this = arguments[1] ||window;

       for(var i=0;i<arr.length;i++){
           callback.call(_this,arr[i],i,arr)
      }
    }

     

    4、reduce方法的封装及使用

    Array.prototype.reduceAlley = function(callback,initVal){
       //获取数组
       var arr = this;
       //判断用户是否传递了初始值
       var isInitValFlag = false;
       //最终要返回的数据
       var prev;


       //如果用户传递了初始值
       if(initVal){
           //则将初始值赋值给prev,并且将isInitValFlag更改为true
           prev = initVal;
           isInitValFlag = true;
      }


       for(var i=0;i<arr.length;i++){
           //判断初始值是否传递了 如果没有传值则将数组的第一个值定义为初始值
           if(isInitValFlag){
              prev = callback(prev,arr[i],i,arr);
          }else{
               prev = arr[i];
               isInitValFlag = true;
          }
      }

       return prev;
    }

    判断数组中的最大值

    var arr = [1,2,3,4,5];

    arr.reduce((prev,curr)=>{
       return Math.max(prev,curr)
    })

    实现扁平化数组

    var arr = [[1,2],[3,4],[5,6,[7,8]]] 

    function mapArr(arr){
      return arr.reduce((prev,curr)=>{
           return prev.concat(Array.isArray(curr)?mapArr(curr):curr)
      },[])
    }

    如何获取url地址中的参数

    var url = "http://www.baidu.com?name=alley&age=19";

    var str = url.slice(url.indexOf("?")+1);

    str.split("&").reduce(function(prev,curr){
       var key = curr.split("=")[0];
       var val = curr.split("=")[1];

       prev[key] = val;
       return prev
    },{})

     

  • 相关阅读:
    C#-----类DateTime的常用方法
    C#-----字节数组(byte[])和字符串相互转换
    maven执行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误
    关于dubbo服务的xml配置文件报错的问题
    The method getTextContent() is undefined for the type Node
    jetty各个版本对应的jdk版本
    dubbo启动报java.lang.ClassNotFoundException: javassist.ClassPath
    MAC下安装多版本JDK和切换几种方式
    安装第三方jar包的两种方式
    使用 Nexus 搭建私服仓库时我犯的一个小错误
  • 原文地址:https://www.cnblogs.com/junjun-001/p/12033377.html
Copyright © 2020-2023  润新知