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
},{})

map、filter、forEach、reduce数组方法的封装的更多相关文章

  1. Map,Filter和Reduce

    转自:https://www.aliyun.com/jiaocheng/444967.html?spm=5176.100033.1.13.xms8KG 摘要:Map,Filter和Reduce三个函数 ...

  2. Python Map, Filter and Reduce

    所属网站分类: python基础 > 函数 作者:慧雅 原文链接: http://www.pythonheidong.com/blog/article/21/ 来源:python黑洞网 www. ...

  3. [译]PYTHON FUNCTIONS - MAP, FILTER, AND REDUCE

    map, filter, and reduce Python提供了几个函数,使得能够进行函数式编程.这些函数都拥有方便的特性,他们可以能够很方便的用python编写. 函数式编程都是关于表达式的.我们 ...

  4. Map, filter and reduce

    To add up all the numbers in a list, you can use a loop like this: Total is initialized to 0. Each t ...

  5. js Array 中的 map, filter 和 reduce

    原文中部分源码来源于:JS Array.reduce 实现 Array.map 和 Array.filter Array 中的高阶函数 ---- map, filter, reduce map() - ...

  6. Python之内建函数Map,Filter和Reduce

    Python进阶 map,filter, reduce是python常用的built-in function. 且常与lambda表达式一起用. 其中: map 形式:map(function_to_ ...

  7. Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据

    什么是流处理 如果有 java 使用经验的同学一定会对 java8 的 Stream 赞不绝口,极大的提高了们对于集合类型数据的处理能力. int sum = widgets.stream() .fi ...

  8. python库函数Map, Filter and Reduce的用法

    python中有三个函数式编程极大的简化了程序的复杂性,这里就做一下讨论和记录. 一 Map:应用在链表输入所有元素的函数,它的格式如下所示: map(function_to_apply, list_ ...

  9. [Python学习笔记-002] lambda, map, filter and reduce

    1. lambda lambda, 即匿名函数,可以理解为跟C语言的宏类似.例如: >>> max = lambda x, y: x if x > y else y >& ...

随机推荐

  1. 自己写的一些Delphi常用函数

    今天在整理以前写过的代码,发现有些函数还是挺实用的,决定将其贴到Blog上,与众多好友一起分享.{*************************************************** ...

  2. STL lower_bound upper_bound 用法

    1.lower_bound(begin,end,x) 返回第一个>=x的位置,找不到return .end() 2.upper_bound (begin,end,x) 返回第一个>x的位置 ...

  3. 在ag-grid表格上实现类似Excel中的按下enter键自动跳转到下一行对应的输入框功能,Angular4开发

    最近的项目使用ag-grid在Angular中处理表格,收到个需求是要能够同时修改大量的数据,按下Enter键的时候,光标得自动跳到下一行的对应列上. 方法一:用ag-grid自带的 enterMov ...

  4. ElasticSearch Roaring bitmap 和跳表联合查询

    ElasticSearch Roaring map 先把所有数按65535划分, 划分方法就是求商和余数,商代表数字最终在哪一块,余数代表最终在块内的数字 比如 1, 65536, 65537, 13 ...

  5. 3.1 开始使用 redux

    前面我们介绍了 flux 架构以及其开源实现 redux,在这一节中,我们将完整的介绍 redux: redux 介绍 redux 是什么 redux 概念 redux 三原则 redux Store ...

  6. npm和cnpm的安装(window)

    一:安装node.js 1.进入https://nodejs.org/en/中下载自己电脑相对应的node.js. 2.将下载下来的node.js进行安装. 3.利用管理员身份打开cmd,在里面输入n ...

  7. vmvare下centos7配置静态ip

    首先,将网络适配设置成为桥接模式 查看本机IP地址,ipconfig,记住ipv4地址和默认网关地址,等会配置的时候要用 启动Centos,进入终端模式,设置IP地址, 切换到这个目录下,cd /et ...

  8. python去除rpm仓库中同名低版本的包

    编程思路1 遍历目标路径的rpm包并保存特性包列表: 2 利用python模块rpmUtils提取RPM包的特征信息:包名  版本号 架构 3 遍历特性列表中存在重复包名的rpm, 将低版本的rpm包 ...

  9. 2-Ubuntu命令安装mysql服务器和客户端及安装后的简单验证操作

    转自: https://www.cnblogs.com/zhuyp1015/p/3561470.html 安装完成之后可以使用如下命令来检查是否安装成功:   sudo netstat -tap | ...

  10. HTML5 Canvas知识点学习笔记

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangyibin628/article/details/30108165 canvas ① 主要作 ...