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
},{})
map、filter、forEach、reduce数组方法的封装的更多相关文章
- Map,Filter和Reduce
		
转自:https://www.aliyun.com/jiaocheng/444967.html?spm=5176.100033.1.13.xms8KG 摘要:Map,Filter和Reduce三个函数 ...
 - Python Map, Filter and Reduce
		
所属网站分类: python基础 > 函数 作者:慧雅 原文链接: http://www.pythonheidong.com/blog/article/21/ 来源:python黑洞网 www. ...
 - [译]PYTHON FUNCTIONS - MAP, FILTER, AND REDUCE
		
map, filter, and reduce Python提供了几个函数,使得能够进行函数式编程.这些函数都拥有方便的特性,他们可以能够很方便的用python编写. 函数式编程都是关于表达式的.我们 ...
 - 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 ...
 - js Array 中的 map, filter 和 reduce
		
原文中部分源码来源于:JS Array.reduce 实现 Array.map 和 Array.filter Array 中的高阶函数 ---- map, filter, reduce map() - ...
 - Python之内建函数Map,Filter和Reduce
		
Python进阶 map,filter, reduce是python常用的built-in function. 且常与lambda表达式一起用. 其中: map 形式:map(function_to_ ...
 - Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
		
什么是流处理 如果有 java 使用经验的同学一定会对 java8 的 Stream 赞不绝口,极大的提高了们对于集合类型数据的处理能力. int sum = widgets.stream() .fi ...
 - python库函数Map, Filter and Reduce的用法
		
python中有三个函数式编程极大的简化了程序的复杂性,这里就做一下讨论和记录. 一 Map:应用在链表输入所有元素的函数,它的格式如下所示: map(function_to_apply, list_ ...
 - [Python学习笔记-002] lambda, map, filter and reduce
		
1. lambda lambda, 即匿名函数,可以理解为跟C语言的宏类似.例如: >>> max = lambda x, y: x if x > y else y >& ...
 
随机推荐
- python内置模块-json和pickle
			
安装第三方库 pip3 install requests 源码安装:下载源码,解压后切换到当前目录 执行python setup.py install json和pickl ...
 - python之—flask虚拟环境
			
一.安装: 输入以下命令可以检查系统是否安装了virtualenv : $ virtualenv --version 如果结果显示错误,你就需要安装这个工具. 1.Ubuntu 用户可以使用下述命令安 ...
 - Android开发常用的Intent的URI及示例
			
参考资料:http://www.oschina.net/code/snippet_166763_6502 //以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent. / ...
 - (转)openfire插件开发(一)
			
转:http://blog.csdn.net/lovexieyuan520/article/details/37774909 1. 在上一篇博文中,我介绍了Openfire3.9.3源代码导入ecli ...
 - ()获取Cookies session
			
[HttpGet] public string mo() { var httpRequest = HttpContext.Current.Request; var a = httpRequest.Co ...
 - [已解决]报错JSONDecodeError
			
报错: 解决:
 - jq容易混淆点
			
jQuery链式编程: 原:把当前元素颜色修改为红色,其余兄弟颜色不变 $(this).css("color",'red') ; $(this).siblings().css(&q ...
 - yppasswd, ypchfn, ypchsh - 修改你在NIS数据库中的密码
			
SYNOPSIS(总览) yppasswd [-f] [-l] [-p] [user] ypchfn [user] ypchsh [user] DESCRIPTION(描述) 在Linux中,标准的 ...
 - ARM 寄存器 和 工作模式了解
			
一. ARM 工作模式 1. ARM7,ARM9,ARM11,处理器有 7 种工作模式:Cortex-A 多了一个监视模式(Monitor) 2. 用户模式:非特权模式,大部分任务执行在这种模式 ...
 - VS2012在win7 64位机中x86和x64下基本类型的占用空间大小(转)
			
VS2012在win7 64位机中x86和x64下基本类型的占用空间大小 #include "stdafx.h" #include <windows.h> int _t ...