数组的几个迭代(循环遍历)的方法
1:map()
将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。原数组没有变化.
let arr = [1,2,3,4,5]
let arrNew = arr.map(res=> {
return res+1
})
console.log(arr) //原数组没有变化
console.log(arrNew)//组成一个新的数组返回
map接收一个函数作为参数,该函数调用的时候,map传入三个参数:
1:当前成员 2:当前位置 3:数组本身
map方法还可以接收第二个参数,用来绑定回调函数内部的this变量
let arr = ['a', 'b', 'c'];
[1, 2].map(function (e) {
return this[e];
}, arr)
// ['b', 'c']
上面代码通过map()方法的第二个参数,将回调函数内部的this对象,指向arr数组。
如果数组有空位,map()方法的回调函数在这个位置不会执行,会跳过数组的空位。
2:forEach()
1: forEach函数类似于map,相当于for循环去遍历、 区别是 forEach不返回值。只是操作数据
也就是说如果数组的遍历目的是为了得到返回值,那么用map,否则用forEach。
forEach()遍历数组不是为了得到返回值,
而是为了在屏幕输出内容,所以不必使用map()方法
forEach()方法也可以接受第二个参数,绑定参数函数的this变量。
var out = []; [1, 2, 3].
forEach(function(elem) {
this.push(elem * elem);
}, out);
out // [1, 4, 9]
注意:forEach()方法不会跳过undefined和null,但会跳过空位
forEach方法无法中断执行,总会将所有的成员遍历完。
如果希望符合某个条件就中断遍历,要使用for循环
3:for 循环
var arr = [1, 2, 3];
for (var i = 0; i < arr.length; i++) {
if (arr[i] === 2) break;
console.log(arr[i]); //1
}
4: filter()
用于过滤数组成员,满足条件的成员组成一个新数组返回、不会改变原数组
[1, 2, 3, 4, 5].filter(function (elem) {
return (elem > 3);
}) // [4, 5]
5: some() every()
这两个方法类似“断言”(assert),返回一个布尔值,表示判断数组成员是否符合某种条件。
some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。
every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。
注意:对于空数组,some方法返回false,every方法返回true,回调函数都不会执行。
let arr = [1,2,4,5,6] let arr1 = arr.every((ele, index, array)=>{ return ele>3 }) console.log(arr1) //false let arr = [1,2,4,5,6] let arr1 = arr.some((ele, index, array)=>{ return ele>3 }) console.log(arr1) //true
以上方法总结:
1:every():对数组的每一项都运行的函数,如果每一项函数都返回的是true,则最后结果返回的true。
2:filter() 对数组的每一项都运行的函数,函数返回true的项会组成数组返回。
3:forEach() 对数组每一项都运行 没有返回值。相当于for循环去遍历元素。
4:map() 对数组每一项都运行,返回由每次函数调用的结果构成的数组。
对原始数组同样位置的元素做操作。非常适合创建与原数组一一对应的新数组。
5:some()对每一项都运行的,如果有一个返回的true,则返回true。