一、forEach
遍历数组,对数组的每个元素执行特定的函数。
forEach()方法对数组的每个元素执行一次给定的函数
const arr=[1,2,3,1,2,9,8]
arr.forEach((item,index,arr)=>{
console.log(item,index,arr)
})
执行结果:
实现原理:
const arr=[1,2,3,1,2,9,8]
arr.forEach((item,index,arr)=>{
console.log(item,index,arr)
return
// 无法通过break语句中断循环,可用return语句当前回调函数中返回,即和break一样跳出本次迭代
})
for 可以通过break continue退出循环,forEach不行.
原因:foreach每一次循环都是一个单独的函数执行,因此每一个函数的return不会影响其他函数的执行,所以无法跳出循环;可以通过try-catch退出循环
二、Map
map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
const newArr=arr.map(item=>item*2)
console.log(newArr)
console.log(arr)
执行结果
forEach和map的区别
区别一:
map
会返回一个新数组,forEach
不会;实际上是因为forEach
不会返回任何值(实际上返回的是undefined
),而map
是有返回值的,是一个新数组
forEach
和map
的实现原理相似。它们都是通过遍历数组,对数组的每个元素执行特定的函数。区别主要在于它们处理函数返回值的方式不同。forEach
忽略函数的返回值,而map
则将函数的返回值收集到一个新的数组中
map和forEach会不会改变原数组?
基础数据类型:两者都不会改变
引用数据类型(数组、对象):两者都会改变
原因:
这是因为在使用 forEach
和 map
方法时,对引用类型
元素的修改会直接反映在原始数组
中。这是因为引用类型的元素实际上存储的是引用(内存地址
),而非值本身
。因此,通过引用
可以访问和修改原始数组
中的元素。
区别二:
- foreach可以跳过本次循环的return后面的代码逻辑,
return
语句可以当前回调函数中返回,而map不能,只能遍历完整个数组。
区别三:
- forEach不支持链式调用,而map支持链式调用,可以继续对返回的新数组进行操作。
参考文章: 面试:问js的forEach和map的区别 - 掘金
三、filter
const newARR=arr.filter(item=>item>=3)
console.log(newARR)
执行结果:
filter的回调函数是boolean,如果返回的为true,才会将过滤的值汇集到新数组中;
四、some和every
它们返回一个布尔值
some
数组中只要有一个满足条件即可返回true
every
数组中需要所有元素满足条件才返回true
const arr=[1,2,2,3,4,5,9]
const flag1=arr.some(item=>item>=3)
const flag2=arr.every(item=>item>=3)
console.log('1',flag1)
console.log('2',flag2)