map(),forEach(),every(),some(),filter()的区别
在实际项目中在数据交互中会经常需要用到循环,你是否只会用forEach呢?为了减少请求,会在达到某个要求后需要及时退出,是否就只会用for循环了呢?
今天就介绍几种常用的循环,分析他们之间的区别,话不多说直接看案例。
1.map
let arr = [1,2,3,4,5]
let newarr =arr.map((item, index) => {
console.log(index) // 0 1 2 3 4
return item * 2
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(newarr) // [2, 4, 6, 8, 10]
map不会改变原数组,他可以返回一个新的数组,当遍历数组时,即使内部改变原数组的时也不会改变新的数组,简单来说不改变原数组、新添加的元素不会进入循环里。
2.forEach
let arr = [1, 2, 3, 4, 5]
let newarr = arr.forEach((item, index) => {
console.log(index) // 0 1 2 3 4
if (item === 2) {
return
}
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(newarr) // undefined
forEach不会生成一个新的数组,而且无法通过return或break跳出本次循环,即使符合return的条件,但是会继续循环,就如上面的例子,即使item === 2为true但是3、4、5还是会继续进入循环。
3.every
let arr = [1, 2, 3, 4, 5]
let newArr = arr.every((item, index) => {
console.log(index) // 0
return item > 1
})
console.log(arr) //[1, 2, 3, 4, 5]
console.log(newArr) //false
every不会改变原数组,遍历数组的每一项,如果每一项都满足条件,则会返回true。
4.some
let arr = [1, 2, 3, 4, 5]
let newArr = arr.some((item, index) => {
console.log(index) // 0 1
return item > 1
})
console.log(arr) //[1, 2, 3, 4, 5]
console.log(newArr) //true
some不会改变原数组,遍历数组的每一项,如果任一项满足条件,则会返回true。
5.filter
let arr = [1, 2, 3, 4, 5]
let newArr = arr.filter((item, index) => {
console.log(index) // 0 1 2 3 4
return item > 1
})
console.log(arr) //[1, 2, 3, 4, 5]
console.log(newArr) //[2, 3, 4, 5]
filter不会改变原数组,返回符合条件的数组。
简单总结
1.希望在符合条件时退出循环,用 every() 或 some()
两者区别如下:
1)some一直在找符合条件的值,一旦找到,则不会继续迭代下去。
2)every从迭代开始,一旦有一个不符合条件,则不会继续迭代下去。
2.希望返回符合条件的数据,用 filter()
3.希望对数组进行一些集体更改,用map()
4.仅仅想迭代数组,使用forEach()
5.返回值
1)every和some都返回一个布尔值true或false
2)filter和map返回一个数组
3)forEach没有返回值
如果有错误的地方请指出,我们一起学习进步!
如果对你有帮助,可以转发/收藏,点个赞给个支持一下吧~