归约函数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是 ...
随机推荐
- FIREDAC调用中间件远程方法查询数据示例
服务端使用FDQUERY查询数据并返回TDATASET: function TServerMethods1.GetData(var sql: string): tdataset;begin qry.C ...
- jQuery基础学习2——DOM和jQuery对象
<body> <h3>例子</h3> <p title="选择你最喜欢的水果." >你最喜欢的水果是?</p> < ...
- CoordinatorLayout的简单应用(材料设计新控件)
CoordinatorLayout字面意思为:协调布局,一般作为根布局使用.关于这个布局,记录一下两个用法,备忘. 一.配合 FloatingActionBar 使用 <?xml version ...
- Measuring Signal Similarities
http://cn.mathworks.com/help/signal/examples/measuring-signal-similarities.html Open This Example ...
- Netty4.x分析
官网定义: netty是一个异步.事件驱动的网络应用框架,用于快速开发可维护的.高性能的服务端和客户端程序. 原理分析 Architecture Overview 网络模型:netty采用了Reac ...
- 利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)
转自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括, ...
- win7硬盘安装Ubuntu12.04 64位时显示Error 15: File not found.
安装Ubuntu12.04 -64位时,用EasyBCD建好引导文件重启电脑后出现如下错误: Error 15: File not found 原因一个是安装文件所在盘符不对,另一个是文件名.Ubun ...
- MySQL几个注意点
1.在创建表.对表进行操作之前,必须首先选择数据库.通过 mysql_select_db() 函数选取数据库.当您创建 varchar 类型的数据库字段时,必须规定该字段的最大长度,例如:varcha ...
- DynamoDB Local for Desktop Development
Would you like to be able to write and test code that uses the Amazon DynamoDB API even if you have ...
- HDU 5536 Chip Factory 字典树
Chip Factory Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...