大家好我是猪哥,今天记录一下JS中的数组的迭代。
迭代:ECMAScript为数组定义了5个迭代方法。每个方法接受两个参数:以每一项为参数运行的函数,以及可选的作为函数运行上下文的作用域对象(影响函数中this的值)。传给每个方法的函数接受3个参数:数组元素、元素索引和数组本身。因具体方法而异,这个函数的执行结果可能会也可能不会影响方法的返回值。
具体方法:
every():对数组每一项都运行传入的函数,如果对每一项函数都返回true,则这个方法返回true.
some():对数组每一项都运行传入的函数,如果有一项函数返回true,则这个方法返回true.
filter():对数组没想运行传入的函数,函数返回true的项会组成数组之后返回。
forEach():对数组每一项都运行传入的函数,没有返回值.
map():对数组每一项都运行传入的函数,返回每次函数调用的结果构成的数组。
这些方法都不改变调用他们的数组。
在这些方法中,every()和some()是最相似的,都是从数组中搜索符合某个条件的元素。不同的地方在于,every()传入的函数必须对每一项都返回true,它才返回true;而some(),只要有意向让传入的函数返回true,它就返回true。
let num = [1,2,3,4,5,4,3,2,1]
let everyResult = num.every(item=>item>2)
// 输出flase
let someResult = num.some(item=>item>2)
//输出true
filter方法基于给定的函数来决定某一项是否应该包含在它返回的数组中。比如,要返回一个所有数值都大于2的数组
let num = [1,2,3,4,5,4,3,2,1]
let filterResult = num.filter(item => item>2);
//输出3,4,5,4,3
或者我们要确定某个数组中的某个对象的属性是否与另一个对象的某个属性相同:
let obj = {id:1,name:'杨'}
let arr = [{id:2,name:'猪'},{id:1,name:'杨'}]
let fillterResulr = arr.filter(item=>item.id == obj.id)
//输出:[{"id":1,"name":"杨"}]
这个方法适合从数组中筛选满足给定条件的数组
map()方法也会返回一个数组。这个数组的每一项都是对原始数组同样位置的元素运行传入函数而返回的接口。例如,将刚刚的数组每项都*2
let num = [1,2,3,4,5,4,3,2,1]
let mapResult = num.map(item => item*2);
//输出2,4,6,8,10,8,6,4,2
这个方法适合创建一个与原始数组元素一一对应的新数组