【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?

大家好,我是IT修真院武汉分院web第16期的学员孟晨,一枚正直纯洁善良的web程序员
今天给大家分享一下,修真院官网js(职业)任务四,深度思考中的知识点——对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?

1.背景介绍

使用JavaScript数组常常需要对数组进行遍历、迭代操作。而我们常用的就是for语句对数组进行迭代。
然而在ECMAscript5已经为数组定义了5个迭代的方法,分别是:filter、some、map、foreach、every,下面我们讲讲它们的具体作用。

2.知识剖析

五个迭代方法,每个方法都接收两个参数:要在每一项上运行的函数和运行该函数的作用域对象(可选的)。
传入这些方法中的函数会接收三个参数:数组的项的值、该项在数组中的位置和数组对象本身。
1. filter()是对数组中的每一项运行给定函数,返回该函数会返回true的项所组成的数组。(如例子中的,只需要大于2的数字,就把其他的筛选掉了)
下面就是一个简单的例子
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
然后在网上找了个图片例子更加直观
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
图片来源为下方的参考三
2. map()是对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。(即例子中的给每个数字进行乘2的结果)
也是一个简单的例子
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
再次奉上图片例子
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
图片来源为下方的参考三
3. forEach() 是多数组中的每一项运行给定函数,这个方法没有返回值。它只是对数组中的每一项运行传入的函数,没有返回值。本质上与使用for循环迭代数组一样。(例子跟map的例子一致只是forEach没有返回值所以创建了一个arr2的空数组)
继续例子
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
和图片例子
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
图片来源为下方的参考三
4. every()是对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
5. some()是对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。
这俩放一起说的原因是因为这俩都是对数组每个值进行判断
例子(every的例子因为1就不大于2了所以直接停止返回flase,some的例子即是当到了3就停止返回ture)
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?

3.常见问题

迭代和遍历、循环、递归有什么区别?

4.解决方案

循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while语句。
循环能对应集合,列表,数组等,也能对执行代码进行操作。

迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
迭代只能对应集合,列表,数组等。不能对执行代码进行迭代。

遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
遍历同迭代一样,也不能对执行代码进行遍历。

递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的斐波纳契数列。
线性递归和尾递归。

5.编码实战

下面是一点小实例,运行时长方形会从上面变到下面

首先时filter()
因为filter是筛选,所以这里只用满足条件的会被运行就是3,4,5被掉到下面了
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?

然后是map()
这里是对所有数组里的数都进行了乘2,所以全部下降并数字乘2
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?

最后是forEach()
需要说的是因为这个值不会返回值,而是对数组里每个数都进行了依次乘3,所以创建了新数组arr2并赋值(区分上面的例子,嘿嘿)

【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?

6.扩展思考

ES5中两种归并方法

reduce()可以实现一个累加器的功能,将数组的每个值(从左到右)将其降低到一个值。

reduceRight()与reduce()功能一样,reduce是从数组的逐个遍历 到最后。而reduceRight()则从数组的最后一项开始,向前遍历到第一项。
例子
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
还是图片例子
【修真院web小课堂】对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
图片来源于下方参考三

7.参考文献

参考一:https://www.cnblogs.com/feichengwulai/articles/3642107.html
参考二:https://segmentfault.com/a/1190000009870199
参考三:https://www.cnblogs.com/shuiyi/p/5058524.html

8.更多讨论

今天的分享就到这里啦,下面链接为修真院的链接感兴趣的童鞋可以注册看看
http://www.jnshu.com/login/1/25438437
欢迎大家点赞、转发、留言、拍砖~