JS高阶函数--------map、reduce、filter
一、filter
filter用于对数组进行过滤。
它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
1.语法
Array.filter(function(currentValue, indedx, arr), thisValue)
第一个参数是函数
这个回调函数的返回值是一个boolean值
当检查元素符合过滤条件的时候会返回true,函数内部会自动将这个元素加入新数组中
当不符合条件时会返回false,函数内部会过滤掉这个元素
例子1:返回数组中小于100的元素
const nums = [10, 20, 50, 101, 222,40]
let newNums = nums.filter(function (n) {
return n < 100
})
console.log(newNums); //[10, 20, 50, 40]
例子2:筛选空格
const arr = ['0',1,2,3,4,"",5,1,4,'0',""];
let arr_filter = arr.filter(function(x){
return x;/* 筛选空格 */
})
console.log(arr_filter)
例子3:去除Array的重复元素
const arr_repeat = ['A', 'B', 'A', 'B', 'B', 'C', 'A', 'D', 'C']
let arr_filter = arr_repeat.filter(function (el, index, self) {
// console.log(self.indexOf(el))
// console.log('index',index)
return self.indexOf(el) == index })
console.log(arr_filter) //["A", "B", "C", "D"]
去除重复元素依靠的是indexOf总是返回某个元素第一次出现的位置,后续的重复元素位置index与indexOf返回的位置不相等,因此被filter滤掉了。
二、map
map() 方法:原数组中的每个元素调用一个指定方法后,返回返回值组成的新数组。
const nums = [2, 4, 6, 8, 10]
newNums = nums.map(function (n) {
return n*2
})
console.log(newNums)
三、reduce
reduce函数对数组中的所有内容进行汇总。
reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
语法:
arr.reduce(callback,[initialValue])
第一个参数是回调函数
这个回调函数可以接收四个参数
previousValue (第一项的值或者上一次叠加的结果值,或者是提供的初始值(initialValue))
currentValue (数组中当前被处理的元素)
index (当前元素在数组中的索引)
array (数组本身)
initialValue (作为第一次调用 callback 的第一个参数,可以控制返回值的格式)不传默认为0
例子1:数组求和
const arr = [1, 2, 3, 4, 5]
let sum = arr.reduce(function (pre, cur) {
console.log(pre, cur) //输出的是第一项的值或上一次叠加的结果,正在被处理的元素
return pre + cur
})
console.log(sum) //
1 2
3 3
6 4
10 5
15
例子2:不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数
思路:1.先把字符串13579先变成Array——[1, 3, 5, 7, 9]
2.再利用reduce()就可以写出一个把字符串转换为Number的函数。
const s = '13579'
function string2int(s) {
let arr = s.split('').map(function(x){
return +x;
})
console.log(arr) //[1, 3, 5, 7, 9]
let arr_reduce = arr.reduce(function(prev,res){
console.log(prev, res)
return prev*10+res;
})
console.log(arr_reduce) //
return arr_reduce }
string2int(s)
1.split() 方法用于把一个字符串分割成字符串数组。
格式:
stringObject.split(separator,howmany)
separator 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。如果是空字符串”,按每个单词分割
howmany 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
2.parsenInt和+
js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。
在字符串前面输入‘+’也能将字符转化成数值,输出如下:
1 3
13 5
135 7
1357 9
13579
例子3:求一串字符串中每个字母出现的次数
暂时不会
参考:
https://www.cnblogs.com/jianxian/p/10582683.html
https://blog.csdn.net/baidu_36065997/article/details/79079880
JS高阶函数--------map、reduce、filter的更多相关文章
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- JavaScript高阶函数 map reduce filter sort
本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 高阶函数 一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数 1.高阶函数之map: ...
- Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
高阶函数Higher-orderfunction 变量可以指向函数 >>> abs #abs(-10)是函数调用,而abs是函数本身 <built-in function ab ...
- 函数式编程 高阶函数 map&reduce filter sorted
函数式编程 纯函数:没有变量的函数 对于纯函数而言:只要输入确定,那么输出就是确定的.纯函数是没有副作用的. 函数式编程:允许把函数本身作为参数传入另一个函数,还允许返回一个函数 高阶函数:一个函数的 ...
- js 高阶函数 map reduce
map() var arr = [1,3,4]; function a(x){ return x*x; } //map可以将一个函数作为参数执行,将数组中的值,依次使用a函数处理: return ar ...
- Python高阶函数_map/reduce/filter函数
本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...
- 辅助函数和高阶函数 map、filter、reduce
辅助函数和高阶函数 map.filter.reduce: 一.辅助函数:(1-1)响应式函数 (数组更新检测): push() pop() shift() unshift() ...
- JavaScript高阶函数map/reduce、filter和sort
map() 举例说明,比如我们有一个函数f(x)=x²,要把这个函数作用在一个数组[1,2,3,4,5,6,7,8,9]上. 由于map()方法定义在JavaScript的Array中,我们调用Arr ...
- js高阶函数map和reduce
map 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: 由于map()方法定义在JavaScr ...
随机推荐
- 【漏洞复现】局域网 ARP 中间人攻击 获取他人账号密码
日期:2019-07-18 14:24:42 更新: 作者:Bay0net 介绍:如何在局域网内,窃取其他用户的账号密码? 0x01. 漏洞环境 攻击工具 arpspoof 基本用法: arpspoo ...
- 应用安全 - Web框架 - 数据库管理 - phpMyAdmin - 漏洞汇总
CVE-2019-18622 Date: 2019.10.28 类型: SQL injection in Designer feature 影响范围: phpMyAdmin versions prio ...
- 深入理解java:2.3. 并发编程 java.util.concurrent包
JUC java.util.concurrent包, 这个包是从JDK1.5开始引入的,在此之前,这个包独立存在着,它是由Doug Lea开发的,名字叫backport-util-concurrent ...
- Java第二周总结
一.Java 基础程序设计 第一章: (1)在Java中源文件的扩展名为.java,编译Java源程序文件产生相应的字节码文件扩展名为.class (2)public class定义要求类名称保持一致 ...
- 简单的遍历xml
#include <opencv2\opencv.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv ...
- Java - PhantomJS + EChartsConvert实现ECharts图片保存到服务端
1.所需工具 1>phantomjs:官网下载http://phantomjs.org/download.html 国内镜像http://npm.taobao.org/dist/phantomj ...
- HDU 1231 题解
题面: 最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem ...
- [51Nod1623] 完美消除
link $solution:$ 首先我们可以发现一个结论,对于一个数 $x$ ,它的最低修改次数为它每位与前去中是否都比此位上的数大,有则答案 $-1$ .因为若有小数则没有办法将其答案贡献变低. ...
- 【学习总结】快速上手Linux玩转典型应用-第7章-WebServer安装和配置讲解
课程目录链接 快速上手Linux玩转典型应用-目录 目录 1. Apache的安装 2. Apache的虚拟主机配置及伪静态操作 3. Nginx的基本操作 4. Nginx伪静态的实现 5. 实例演 ...
- 解决arcgis10.5直连postgresql报错
软件版本: arcgis10.5 postgresql9.5.9 最近使用desktop直连postgresql,已经拷贝了类库文件到desktop及pgsql配置完成的前提下,但还是报以下错误: 解 ...