这里是修真院前端小课堂,每篇分享文从
八个方面深度解析前端知识/技能,本篇分享的是:
【对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?】
【修真院web小课堂】
大家好,我是IT修真院上海分院第8期的学员周能,一枚正直纯洁善良的web程序员,今天给大家分享一下,修真院官网web任务4,深度思考中的知识点——对一个数组 FILTER、SOME、MAP、FOREACH的操作分别有什么作用?
(1)背景介绍:
什么是数组
数组就是一组数据的集合
其表现形式就是内存中的一段连续的内存地址
数组名称其实就是连续内存地址的首地址
数组定义时无需指定数据类型、数组长度、数组可以存储任何数据类型的数据
(2)知识剖析:
使用JavaScript数组常常需要对数组进行遍历、迭代操作。而我们常用的就是for语句对数组进行迭代。然而在ECMAscript5已经为数组定义了5个迭代的方法,分别是:filter、some、map、foreach、every,下面我们讲讲它们的具体作用。
每个方法都接收两个参数:要在每一项上运行的函数和(可选)运行该函数的作用域对象, 传入这些方法中的函数接收三个参数,数组项的值,该项在数组中位置,和数组对象本身。根据方法不同,作用也不同
filter()对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组
some()对数组中每一项运行给定函数,如果函数对任意一项返回true,则返回true。
map()对数组中每一项运行给定函数,返回每次函数调用的结果组成的数组
forEach()对数组中每一项运行给定函数,没有返回值。
every() 对数组中每一项运行给定函数,如果该函数每一项都返回true,则返回true
以上方法都不会修改数组中的包含项
(3)常见问题:
如何选择以上方法,有何应用
(4)解决方案:
如果用for循环来选择符合条件的项并push到新数组相对麻烦,不够简单 迭代相比于for循环遍历,代码结构简单、规整 some()和every()可以用来进行数组项的判断。如果你要得到需要的项,可以用filter(),map()适合创建包含的项与另外一个数组一一对应的数组
(5)编码实战:
var arr = [1, 2, 3, 4, 5]
console.log(arr)
// filter
var x = arr.filter(function (item, index, arr) {
return (item > 2)
})
console.log(x)
//some
var x = arr.some(function (item, index, arr) {
return (item > 2)
})
console.log(x)
// map
var x = arr.map(function (item, index, arr) {
return (item > 2)
})
console.log(x)
// forEach
var x = arr.forEach(function (item, index, arr) {
console.log(item > 2)
})
console.log(x)
// every
var x = arr.every(function (item, index, arr) {
return (item > 2)
})
console.log(x)
(6)拓展思考:
递归和迭代的区别是什么,各有什么优缺点?
迭代指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
递归指的是一个函数不断调用自身的行为。
程序调用自身称为递归,利用变量的原值推出新值称为迭代。递归的优点大问题转化为小问题,可以减少代码量,同时代码精简,可读性好; 缺点就是递归调用浪费了空间,而且递归太深容易造成堆栈的溢出。 迭代的好处就是代码运行效率好,因为时间只因循环次数增加而增加,而且没有额外的空间开销; 缺点就是代码不如递归简洁
(7)参考文献:
Js 数组——filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()
递归和迭代
(8)更多讨论:
1、every和some区别
答:every每一项返回true才返回true,some是有一项返回true则返回true
2、参数item、index和arr代表的是什么?
答:传入这些方法中的函数会接收三个参数,item表示遍历后的当前对象,里面的index代表当前循环到第几个索引,arr代表 数组对象本身。
3、递归和迭代的区别是什么,各有什么优缺点?
答:迭代指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
递归指的是一个函数不断调用自身的行为。
程序调用自身称为递归,利用变量的原值推出新值称为迭代。递归的优点大问题转化为小问题,可以减少代码量,同时代 码精简,可读性好; 缺点就是 递归调用浪费了空间,而且递归太深容易造成堆栈的溢出。 迭代的好处就是代码运 行效率好,因为时间只因循环次数增加而增加,而且没有额外的 空间开销; 缺点就是代码不如递归简洁
(9)鸣谢:
感谢观看
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~