归约函数reduce&映射数组map(笔记)
function forEach(array,action){
for(var i=;i<array.length;i++)
action(array[i]);
}
function reduce(combine,base,array){
forEach(array,function(element){
base=combine(base,element);})
return base;
} function countZeroes(array){
function counter(total,element){
return total+(element===?:);
}
return reduce(counter,,array);
}
console.log(countZeroes([,,,,])) 3
【归约函数】
以上三个函数,第一个forEach()实现的是遍历数组,并对其中的每一个元素进行anction()的操作。
第二个 reduce()即归约函数(reduce or fold)通过重复调用一个函数//(该函数将数组的每个元素都加到一个基值上),将数组转化为单一值。
归约函数的三个参数分别是——待执行函数,基数,数组(这样的顺序主要基于习惯问题)。
第三个 函数即计算数组中0元素的个数,解决这个问题即重复比较数组的元素是否为0.故而可以选择归约函数。对应的三个参数分别——counter()函数,0,array。
其中,counter用到条件运算符,值等于0,则基数加一。
另,可以另外定义一个算法函数count,供countZeros使用。
function forEach(array,action){
for(var i=0;i<array.length;i++)
action(array[i]);
}
function count(test,array){
var counted=0;
forEach(array,function(element){
if(test(element)) counted++;
})
return counted;
}
function countZeroes(array){
function isZero(x){return x===0;}//整个函数作为返回值,传递作为if的判断条件。因为函数本身是比较参数是否为0,返回值即true/false.
return count(isZero,array);
}
console.log(countZeroes([0,23,56,0,0])) 3
【映射数组】
所谓映射,是指他可以遍历数组,并且将函数应用于每个元素(比如forEach)。但是他不是丢弃函数返回值,而是利用这些返回值重新建立一个新的数组。
函数count(),用以测试数组中的元素是否符合test的条件,符合则统计数字加一。
函数countZeros(),接受一个参数、即测试的数组。并在其中定义测试的方法test=isZero【因为该方法只对countZeros()函数有意义,所以定义在该函数体内。而其他的像是count()这类,其参数具有更加抽象的普遍意义,故而单独定义。以供反复使用】
function map(func,array){
var result=[];
forEach(array,function(element){
result.push(func(element));
}
)
return result;
}
console.log(map(Math.round,[0.09,2,3.4,9.4,Math.PI]));
[0, 2, 3, 9, 3]
归约函数reduce&映射数组map(笔记)的更多相关文章
- 使用 reduce 实现数组 map 方法
//使用 reduce 实现数组 map 方法 const selfMap2 = function (fn, context){ let arr = Array.prototype.slice.cal ...
- 匿名函数lambda,过滤函数filter,映射类型map
匿名函数lambda, 作用是不用定义函数,用完之后会自动被删掉,在使用执行脚本的时候,使用lambda就可以省下定义函数的过程,简化代码的可读性. 格式是 例子g=lambda x,y:x+y g( ...
- Python 函数之lambda、map、filter和reduce
1.lambda函数 lambda()是Python里的匿名函数,其语法如下: lambda [arg1[, arg2, ... argN]]: expression 学习条件运算时,对于简单的 if ...
- 引用、浅拷贝及深拷贝 到 Map、Set(含对象assign、freeze方法、WeakMap、WeakSet及数组map、reduce等等方法)
从引用聊到深浅拷贝,从深拷贝过渡到ES6新数据结构Map及Set,再到另一个map即Array.map()和与其类似的Array.flatMap(),中间会有其他相关话题,例如Object.freez ...
- JavaScript高阶函数之filter、map、reduce
JavaScript高阶函数 filter(过滤) 用法: 用于过滤,就是把数组中的每个元素,使用回调函数func进行校验,回调函数func返回一个布尔值,将返回值为 true 的元素放入新数组 参数 ...
- Python基础灬高阶函数(lambda,filter,map,reduce,zip)
高阶函数 lambda函数 关键字lambda表示匿名函数,当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. lambda函数省略函数名,冒号前为参数,冒号后函数体. # ...
- python map函数 reduce函数
Python中map()函数浅析 函数式编程: 更好的描述问题 map函数 怎么理解当传入多个参数list时,map如何运作: abc函数第一次传入的数据时 (11,44,77),然后(22,5 ...
- JavaScript系列--JavaScript数组高阶函数reduce()方法详解及奇淫技巧
一.前言 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. reduce()方 ...
- Python经常使用内置函数介绍【filter,map,reduce,apply,zip】
Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是 ...
随机推荐
- 在C#调用C++的DLL简析(一)——生成非托管dll
经过一晚上的折腾,还是下点决心将些许的心得写下来,以免以后重复劳动. C#与C/C++相 比,前者的优势在于UI,后者的优势在于算法,C++下的指针虽然恶心,若使用得当还是相当方便的,最重要的问题是, ...
- hibernate[版本四]知识总结
1.hibernate是orm对象关系映射,是对jdbc的封装 2.hibernate版helloworld 2.1导入jar <dependencies> <dependency& ...
- ntdll.dll函数原型
/*NTDLL Base Functions*/NTSYSAPI NTSTATUS NTAPI NtAcceptConnectPort( OUT PHANDLE PortHandle, IN PVOI ...
- shape中的属性大全
首先,看看事例代码 <shape> <!-- 实心 --> <solid android:color="#ff9999"/> <!-- 渐 ...
- PHP linux spl_autoload_register区分大小写
一个PHP脚本用到spl_autoload_register,在WINDOWS下运行正常,但在LINUX就include不了,后来发现WINDOWS大小写不敏感,而在LINUX下区分大小写,WINDO ...
- MPAndroidChart 的实现
效果图: 代码实现: package com.jiahao.me; import java.util.ArrayList; import java.util.List; import android. ...
- 机器学习笔记之遗传算法(GA)
遗传算法是一种大致基于模拟进化的学习方法,假设常被描述为二进制串.在遗传算法中,每一步都根据给定的适应度评估准则去评估当前的假设,然后用概率的方法选择适应度最高的假设作为产生下一代的种子.产生下一代的 ...
- Xdebug的使用
1.http://www.cnblogs.com/mo-beifeng/articles/2446142.html 2.http://www.cnblogs.com/ximu/articles/200 ...
- Hyper-V网络配置
Hyper-V虚拟交换机类型应用: 外部虚拟网络: 可以实现虚拟机之间.虚拟机和物理机.虚拟机和外部网络的通信. 生产环境不勾选“允许管理操作系统共享此网络适配器”,勾选之后会为主机创建虚拟网卡,会实 ...
- VHD_Update_diskpart
###################功能说明########################该脚本用来对离线VHD文件更新,导入系统补丁############################### ...