对一个数组 filter、some、map、foreach的操作分别有什么作用?
1.背景介绍
使用JavaScript数组常常需要对数组进行遍历、迭代操作。而我们常用的就是for语句对数组进行迭代。然而在ECMAscript5已经为数组定义了5个迭代的方法,分别是:filter、some、map、foreach、every,下面我们讲讲它们的具体作用。
2.知识剖析
2.1每个方法的作用
每个方法都接收两个参数:要在每一项上运行的函数和(可选)运行该函数的作用域对象, 传入这些方法中的函数接收三个参数,数组项的值,该项在数组中位置,和数组对象本身。根据方法不同,作用也不同
every()
对数组中每一项运行给定函数,如果该函数每一项都返回true,则返回true
filter()
对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组
forEach()
对数组中每一项运行给定函数,没有返回值。
map()
对数组中每一项运行给定函数,返回每次函数调用的结果组成的数组
some()
对数组中每一项运行给定函数,如果函数对任意一项返回true,则返回true。
以上方法都不会修改数组中的包含项
3.常见问题
如何选择,有何应用
4.解决方案
如果用for循环来选择符合条件的项并push到新数组相对麻烦,不够简单
迭代相比于for循环遍历,代码结构简单、规整
some()和every()可以用来进行数组项的判断。如果你要得到需要的项,可以用filter(),map()适合创建包含的项与另外一个数组一一对应的数组
5.编码实战
6.扩展思考
递归和迭代的区别是什么,各有什么优缺点?
程序调用自身称为递归,利用变量的原值推出新值称为迭代。
递归的优点大问题转化为小问题,可以减少代码量,同时代码精简,可读性好; 缺点就是递归调用浪费了空间,而且递归太深容易造成堆栈的溢出。
迭代的好处就是代码运行效率好,因为时间只因循环次数增加而增加,而且没有额外的空间开销; 缺点就是代码不如递归简洁
7.参考文献
JS高级程序设计
8.更多讨论
1,问:every和some区别
答:every每一项返回true才返回true,some是有一项返回true则返回true
2,问:every是每一项循环吗
答:没有,循环到false就停止了
3,问:filter和for区别
答:fliter可以返回需要的项组成的数组,大大简化了for循环操作的代码,简洁方便