最近算是和JS刚上了,用到数组的时候也比较多,每次在要遍历数组的时候我都要一个个试,看哪个比较适用于我当前的需要,一直没太明白其中的区别,今天又遇上。。。就在此总结一下吧!
map、forEach、filter、some、every
我们就一个一个来看吧
map
map方法对数组的所有成员依次调用一个函数,根据函数结果返回一个新数组,不改变原始数组。
map方法接受两个参数,第一个参数为函数,第二个为参数为函数中的this对象。
所接受的函数可以有三个参数,第一个是当前遍历的元素,第二个是当前元素的索引,第三个是原始数组对象。
const arr = ['a', 'b', 'c', 'd']
const newArr = [1,2,3,4].map((item, index, o) => {
return item + this[index] + o[index];
}, arr)
//newArr = ['1a1', '2b2', '3c3', '4d4']
forEach
forEach方法对数组的所有成员依次调用一个函数,与map方法基本相似,唯一的区别是 forEach没有返回值,也不会改变原始数组。
注意,forEach方法无法中断执行,总是会将所有成员遍历完。如果希望符合某种条件时,就中断遍历,要使用for循环。
let str = '';
[1,2,3,4].forEach( item => {
str += item;
})
//str = '1234'
filter
filter方法的参数是一个函数,所有数组成员依次执行该函数,将返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。
const newArr = [1,2,3,4].filter( item => {
return item > 2;
})
//str = [3, 4]
some
some方法的参数是一个函数,返回一个布尔值。所有数组成员依次执行该函数并返回一个布尔值,若有一个成员执行该函数后返回true,则some方法返回true,否则返回false。
const a = [1,2,3,4].some( item => {
return item > 2;
})
//a = true
const b = [1,2,3,4].some( item => {
return item > 4;
})
//b = false
every
every与some方法相似,但规则是当所有数组成员的返回值都是true时,才返回true,否则false。
const a = [1,2,3,4].every( item => {
return item > 0;
})
//a = true
const b = [1,2,3,4].every( item => {
return item > 1;
})
//b = false