归约函数reduce&映射数组map(笔记)

function forEach(array,action){
  for(var i=0;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===0?1:0);
  }
  return reduce(counter,0,array);
}
console.log(countZeroes([0,23,56,0,0]))

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]
时间: 2024-11-08 13:03:03

归约函数reduce&映射数组map(笔记)的相关文章

使用 reduce 实现数组 map 方法

//使用 reduce 实现数组 map 方法 const selfMap2 = function (fn, context){ let arr = Array.prototype.slice.call(this) // 这种实现方法和循环的实现方法有异曲同工之妙,利用reduce contact起数组中每一项 // 不过这种有个弊端,会跳过稀疏数组中为空的项 return arr.reduce((pre, cur, index) => { return [...pre, fn.call(con

Python 学习笔记 -- 内嵌函数、闭包、匿名函数、高阶函数map、高阶函数filter、高阶函数reduce

1 #------------------------------内嵌函数------------------------------ 2 #内嵌函数就是在函数内部定义函数 3 #实例一 4 print("#------------------------------内嵌函数------------------------------") 5 def funOutOne(): 6 x = 5 7 def funIn(): 8 x = 3 9 print("My funOutO

Python 函数之lambda、map、filter和reduce

1.lambda函数 lambda()是Python里的匿名函数,其语法如下: lambda [arg1[, arg2, ... argN]]: expression 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = 'evescn' else: name = 'gm' # 三元运算 name = 'evescn' if 1 == 1 else 'gm' 对于简单的函数,也存在一种简便的表示方式,即:lambda

Python经常使用内置函数介绍【filter,map,reduce,apply,zip】

Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是将复杂的数据结构隐藏在内置函数中,用C语言来实现,所以仅仅要写出自己的业务逻辑Python会自己主动得出你想要的结果.这方面的内置函数主要有,filter,map,reduce,apply,结合匿名函数,列表解析一起使用,功能更加强大.使用内置函数最显而易见的优点是: 1. 速度快,使用内置函数,比

GO语言总结(4)——映射(Map)

上一篇博客介绍了Go语言的数组和切片——GO语言总结(3)——数组和切片,本篇博客介绍Go语言的映射(Map) 映射是一种内置的数据结构,用来保存键值对的无序集合. (1)映射的创建 make ( map [KeyType] ValueType, initialCapacity ) make ( map [KeyType] ValueType ) map [KeyType ] ValueType {} map [KeyType ] ValueType { key1 : value1, key2:

源映射(Source Map)详解

一.什么是源映射 为了提高性能,很多站点都会先压缩 JavaScript 代码然后上线, 但如果代码运行时出现错误,浏览器只会显示在已压缩的代码中的位置,很难确定真正的源码错误位置. 这时源映射就登场了. 源映射(Source Map)是一种数据格式,它存储了源代码和生成代码之间的位置映射关系. 源映射一般使用 .map 扩展名,源映射本质是一个 JSON 文本文档,其 MIME 类型也一般设为 application/json. 二.如何使用源映射 在 JavaScript 代码中添加注释:

Reduce Task的学习笔记

转自:http://blog.csdn.net/androidlushangderen/article/details/41243505 MapReduce五大过程已经分析过半了,上次分析完Map的过程,着实花费了我的很多时间,不过收获很大,值得了额,这次用同样的方法分析完了Reduce的过程,也算是彻底摸透了MapReduce思想的2个最最重要的思想了吧.好,废话不多,切入正题,在学习Reduce过程分析的之前,我特意查了书籍上或网络上相关的资料,我发现很大都是大同小异,缺乏对于源码的参照分析

10.2.3.2 在 C# 中以函数风格使用数组

10.2.3.2 在 C# 中以函数风格使用数组 由于有了 LINQ to Object,在 C# 3.0 中,我们已经可以使用许多函数结构来处理数组.大多数 LINQ 运算符不返回数组:如果在数组上调用 Enumerable.Select,结果将返回 IEnumerable<T>.在某些情况下,我们还是愿意将结果保存在数组中,避免调用Enumerable.ToArray,将结果序列复制回数组的开销. 针对数组的一些常用函数式操作,已经成为 System.Array 类中的静态方法:但它们的命

功能样式:Lambda函数和映射

一等函数:Lambda函数和映射 什么是一流的功能? 您之前可能已经听过它说某种特定的语言是有用的,因为它具有"一流的功能".正如我在本系列关于函数式编程的第一篇文章中所说,我不同意这种流行的看法.我同意一流函数是任何函数式语言的基本特性,但我不认为这是语言功能的充分条件.有很多命令式语言也有此功能.但是,什么是一流的功能?当函数可以被视为任何其他值时,函数被描述为第一类 - 也就是说,它们可以在运行时动态分配给名称或符号.它们可以存储在数据结构中,通过函数参数传入,并作为函数返回值返