某一面被问到map和foreach的区别时,灵魂拷问到了,脑子一片空白,自己联想到平常在中间层聚合接口的时候好像是用来返回一个新的数组的,加上猜测map既然返回一个新的数组,那么foreach肯定就不会任何的东西(不然面试官问这个问题就意义不大)然后就答道:map可以返回一个新的数组,而foreach不会返回一个新的数组
,那么foreach到底会返回什么呢?它们的区别到底在哪里呢?
forEach
forEach方法用于调用数组的每个元素,并将元素传递给回调函数。
array.forEach(function(currentValue, index, arr), thisValue)
map
返回一个新数组,并且照原始数组元素顺序依次处理元素,数组中的元素为原始数组元素调用函数处理后的值。
array.map(function(currentValue,index,arr), thisValue)
共同点
- 对空数组都是不会执行回调函数的
- 都能够对数组进行循环
区别
- map() 不会改变原始数组,并且会返回一个新的数组
- forEach() 会改变原始数组,返回值为undefined
示例
map和foreach分别打印什么
const a =[1,2,3,4];
const b = a.map(item => {
if(item > 2) return;
return item
})
// b [1,2,undefined,undefined]
const c = a.forEach(item => {
if(item > 2) return;
return item
})
// c undefined
总结
- map比foreach执行的速度更快
- 因为本人使用的react技术栈,是函数式编程,所以在平常写业务的时候,更喜欢用map,因为foreach会改变原始数组,可能在写业务的过程中,不注意就容易掉坑里,而map不仅不会改变原始数组,还能返回一个全新的数组
- map和foreach各有各的优势,主要是取决于想做什么