JavaScript中函数式编程的体现--map和reduce

最近在学JavaScript,中间看到map和reduce方法,觉得挺有意思的,边学边写下这篇博客。

这两个函数都在某种程度上体现了函数式编程的思想,即将函数作为传入另一个函数的参数。

map()方法的调用者一般是个数组,参数是一个函数,称为callback,返回值是一个由原数组中每个元素执行给定callback函数的返回值组成的新数组。

也就是说,当你用map()方法时,是将组成数组中的每个元素作为参数,传进给定的函数,如果这个函数是有返回值的,则将每次执行函数得到的返回值组成一个新的数组返回。

function pow(x) {
    return x * x;
}

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]

上面我们通过map()方法实现了将arr数组中的每个元素作为pow()方法的参数,得到的返回值是每次执行pow()函数返回值的集合,也就是一个数组。

当然callback函数也是可以没有返回值的,此时,视callback函数返回undefined。

var arr = [0, 1, 2, 3, 4, 5];

var arr1 = arr.map(function(item){ console.log(item) });
//打印 0 1 2 3 4 5 // arr1为[undefined, undefined, undefined, undefined, undefined, undefined]

再来看reduce()方法,和map()方法一样,调用者也是数组,不过这儿的callback函数有些不同,要求必须接收两个参数。

reduce()方法按照从左到右的顺序,先对第一、第二个元素执行callback函数,将得到的结果作为一个参数继续和下一个元素执行callback函数,直到数组中最后一个元素,构建一个最终返回值。

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x + y;
}); // 25

这是一个利用reduce()方法进行数组求和的例子。

需要注意的是reduce()方法除了有callback函数作为参数外,还可以有一个initialValue作为参数,如果指定了 initialValue ,则使用 initialValue 作为 callback 的第一个参数,数组中第一个元素作为第二个参数。

时间: 2024-10-10 16:34:39

JavaScript中函数式编程的体现--map和reduce的相关文章

在JavaScript函数式编程里使用Map和Reduce方法

所有人都谈论道workflows支持ECMAScript6里出现的令人吃惊的新特性,因此我们很容易忘掉ECMAScript5带给我们一些很棒的工具方法来支持在JavaScript里进行函数编程,这些工具方法我们现在可以使用了.在这些函数方法里主要的是基于JavaScript 数组对象的map()方法和reduce()方法. 如果你如今还没有使用map()和reduce()方法,那么现在是时候开始使用了.如今绝大部分的JavaScript开发平台都与生俱来的支持ECMAScript5.使用Map方

JavaScript中函数式编程中文翻译

原著由 Dan Mantyla 编写 近几年来,随着 Haskell.Scala.Clojure 等学院派原生支持函数式编程的偏门语言越来越受到关注,同时主流的 Java.JavaScript.Python 甚至 C++都陆续支持函数式编程.特别值得一提的是,在 nodejs 出现后,JavaScript 成为第一种从前端到后台的全栈语言,而且 JavaScript 支持多范式编程.应用函数式编程的最大挑战就是思维模式的改变———从传统面向对象的范式变为函数式编程范式. <JavaScript

Python函数式编程——filter()、map()、reduce()

提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理大规模海量数据,并在之后广泛的应用于Google的各项应用中,2006年Apache的Hadoop项目[2]正式将MapReduce纳入到项目中. 好吧,闲话少说,今天要介绍的是Python函数式编程中的另外两个内建函数map()和reduce(),而不是Google的MapReduce. 1.filter() 格式:filter( func, seq ) 该内建函数的作

翻译连载 | 附录 A:Transducing(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱:分享,是 CSS 里最闪耀的一瞥:总结,是 JavaScript 中最严谨的逻辑.经过捶打磨练,成就了本书的中文版.本书包含了函数式编程之精髓,希望可以帮助大家在学习函数式编程的道路上走的更顺畅.比心. 译者团队(排名不分先后):阿希.blueken.brucecham.cfanlife.d

翻译连载 | 附录 C:函数式编程函数库-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱:分享,是 CSS 里最闪耀的一瞥:总结,是 JavaScript 中最严谨的逻辑.经过捶打磨练,成就了本书的中文版.本书包含了函数式编程之精髓,希望可以帮助大家在学习函数式编程的道路上走的更顺畅.比心. 译者团队(排名不分先后):阿希.blueken.brucecham.cfanlife.d

全本 | iKcamp翻译 | 《JavaScript 轻量级函数式编程》|《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson - <You-Dont-Know-JS>作者 译者团队(排名不分先后):阿希.blueken.brucecham.cfanlife.dail.kyoko-df.l3ve.lilins.LittlePineapple.MatildaJin.冬青.pobusama.Cherry.萝卜.vavd317.vivaxy.萌萌.zhouyao 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱:

函数式编程工具:filter和reduce

# -*- coding: utf-8 -*- #python 27 #xiaodeng #函数式编程工具:filter和reduce #python内置函数中,map函数是用来进行函数式编程这类工具最简单的内置函数代数 #函数式编程含义: #一种编程范式,也就是如何编写程序的方法论,是一种编程思想. #无法给予准确的定义 #函数式编程的编程风格强调表达式计算,而不是执行命令. #常见函数式编程 #filter:基于某一测试函数过滤出一些元素 #reduce:对每对元素都应用函数并运行到最后结果

JavaScript 与函数式编程

原文:https://bethallchurch.github.io/JavaScript-and-Functional-Programming/ 译文:http://www.zcfy.cc/article/1013 译者注:推荐一篇译文,<函数式编程术语解析>. 本文是我在 2016 年 7 月 29 号听 Kyle Simpson 精彩的课程<Functional-Light JavaScript>时所做的笔记(外加个人的深入研究)(幻灯片在这). 长久以来,面向对象在 Jav

JavaScript ES6函数式编程(三):函子

前面二篇学习了函数式编程的基本概念和常见用法.今天,我们来学习函数式编程的最后一个概念--函子(Functor). 相信有一部分同学对这个概念很陌生,毕竟现在已经有很多成熟的轮子,基本能满足我们日常的业务开发,所以没必须重复造轮子.但是,作为一名(未来)优秀的程序员,光会用怎么能行呢?必须要理解更深层的思想.下面就来学习函子部分的知识... 函子(Functor) 在正式学习函子之前,我会先抛出一个问题,先用普通的方式解决,然后转换为用函子解决,这能帮助我们更好的理解函子.同时,这也是我想说的,