Javascript 常见的高阶函数
高阶函数,英文叫 Higher Order function。一个函数可以接收另外一个函数作为参数,这种函数就叫做高阶函数。
示例:
function add(x, y, f) {
return f(x) + f(y);
}
//用代码验证一下:
add(-5, 6, Math.abs); // 11
一、常见的高阶函数
ES6中数组新增了几种方法,其中 map、reduce、filter 几个都是高阶函数,除此,普通的sort也是高阶函数。分别介绍下新增的三个方法。
1.1、filter
filter 是过滤数组,返回满足条件的数据,组成一个新的数组返回,不满足条件的被丢弃。
实例1:取出数组中小于 100 的数据,放到一个新数组中
let grad = [ 102, 188, 55, 66, 200, 800 ]
let arr2 = grad.filter( function(item){
return item <= 100
})
console.log("arr2",arr2)// 55, 66
上述实例中,filter传入的参数是一个函数,传入的函数依次作用于每个元素,然后根据返回值是 true 或 false 决定保留还是丢弃元素。因为只有 55 66 两个满足条件,所以新的数组中只有这两个元素。
1.2、map
map 是映射的意思。
原数组被映射成一个新的数组,返回值是一个新数组,不改变原来的数组。新的数组与原数组的长度是不会改变的。
实例2:给数据每个元素放大 2 倍。
let arr2 = [ 55, 66 ]
let arr3 = arr2.map( item => {
return item*2
})
//返回结果 [ 110, 132 ]
上述实例,map接收的参数是一个函数,该函数依次作用于每个元素,对元素放大了2倍,也可以对其进行任意的复杂操作。
1.3、reduce
reduce 是对数组进行汇总的,往往进去一个数组,出来是一个数据。经常用于求和和计算平均值。
实例3:对上个实例返回的结果进行求和。
let sum = arr3.reduce((tmp,item)=>{
return tmp+item
})
//返回结果 242
重点来了,如果我们想把上边三个实例合并到一起执行,最终我们可以写得有多简单呢?
// 复杂写法
let grad = [102,188,55,66,200,800]
let arr2 = grad.filter(function(item){
return item <= 100
})
let arr3 = arr2.map(item=>{
return item*2
})
let sum = arr3.reduce((tmp,item)=>{
return tmp+item
})
//简单写法
let sum2 = grad
.filter( item => {return item <= 100})
.map(item=>{return item*2})
.reduce((tmp,item)=>{return tmp+item})
Javascript 常见的高阶函数的更多相关文章
- Javascript 闭包与高阶函数 ( 二 )
在上一篇 Javascript 闭包与高阶函数 ( 一 )中介绍了两个闭包的作用. 两位大佬留言指点,下来我会再研究闭包的实现原理和Javascript 函数式编程 . 今天接到头条 HR 的邮件,真 ...
- JavaScript进阶之高阶函数篇
JavaScript进阶之高阶函数篇 简介:欢迎大家来到woo爷说前端:今天给你们带来的是JavaScript进阶的知识,接下来的系列都是围绕着JavaScript进阶进行阐述:首先我们第一篇讲的是高 ...
- 如何在JavaScript中使用高阶函数
将另一个函数作为参数的函数,或者定义一个函数作为返回值的函数,被称为高阶函数. JavaScript可以接受高阶函数.这种处理高阶函数的能力以及其他特点,使JavaScript成为非常适合函数式编程的 ...
- Javascript 闭包与高阶函数 ( 一 )
上个月,淡丶无欲 让我写一期关于 闭包 的随笔,其实惭愧,我对闭包也是略知一二 ,不能给出一个很好的解释,担心自己讲不出个所以然来. 所以带着学习的目的来写一写,如有错误,忘不吝赐教 . 为什么要有闭 ...
- JavaScript中的高阶函数
之前写的<JavaScript学习手册>,客户跟我说有些内容不适合初学者,让我删了,感觉挺可惜的,拿到这里和大家分享. JavaScript中的一切都是对象,这句话同样适用于函数.函数对象 ...
- JS中几种常见的高阶函数
高阶函数:英文叫Higher-order function.JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数 ...
- javascript中的高阶函数, 和 类定义Function, 和apply的使用
参考: http://www.cnblogs.com/delin/archive/2010/06/17/1759695.html js中的类, 也是用function关键字来定义的: function ...
- Javascript中的高阶函数介绍
高阶函数:高阶看上去就像是一种先进的编程技术的一个深奥术语,一开始我看到的时候我也这样认为的. Javascript的高阶函数 然而,高阶函数只是将函数作为参数或返回值的函数.以下面的Hello,Wo ...
- 《前端之路》之 JavaScript 高级技巧、高阶函数(一)
目录 一.高级函数 1-1 安全的类型检测 1-2 作用域安全的构造函数 1-3 惰性载入函数 1-4 函数绑定 1-5 函数柯里化 1-6 反函数柯里化 一.高级函数 1-1 安全的类型检测 想到类 ...
随机推荐
- Longhorn,企业级云原生容器分布式存储 - 定制默认设置
内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...
- Asp.NetCore 中Aop的应用
前言 其实好多项目中,做一些数据拦截.数据缓存都有Aop的概念,只是实现方式不一样:之前大家可能都会利用过滤器来实现Aop的功能,如果是Asp.NetCore的话,也可能会使用中间件: 而这种实现方式 ...
- C#用SOCKET发送HTTP请求小例
private void button1_Click(object sender, EventArgs e) { string urlStr = this.textUrl.Text ; if (url ...
- 【C++】 四种强制类型转换(static_cast 与 dynamic_cast 的区别!)
强制类型转换 1. static_cast 2. dynamic_cast 3. const_cast 4. reinterpret_cast 5. 为什么要需要四种类型转换? 1. static_c ...
- python下 conda命令手册
0.说明: 对于tensorflow配合keras使用,因为linux服务器没有root权限,所以目前最高可用版本是 1.6.0,否则就会报错某些 so找不到 conda install -n xu ...
- tensorflow实现Word2vec
# coding: utf-8 ''' Note: Step 3 is missing. That's why I left it. ''' from __future__ import absolu ...
- (int)a、&a、(int)&a、(int&)a的区别,很偏僻的题
(int)a.&a.(int)&a.(int&)a的区别,很偏僻的题 #include <iostream> #include <stdio.h> #i ...
- 3k+2形式的素数相关的两个命题的证明
- zabbix告警推送至个人微信
文章原文 自从接触zabbix后,就一直想着怎么才能把告警推送到个人微信上.有这样的想法主要是个人微信的使用频率远远要比钉钉,企业微信,邮箱,飞书等使用频率要高.比如我,就遇到过在周末的时候,因为没有 ...
- css文本溢出省略号大总结,如你所愿
一行: white-space: nowrap; text-overflow: ellipsis; overflow: hidden; word-break: break-all; 两行: width ...