定义和用法
map()
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。 map() 不会改变原始数组。
forEach()
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。
相同点
1、只能遍历数组
2、都是遍历数组每一项
3、都有三个参数:item(遍历的项)、index(当前索引)、arr(原数组)
4、匿名函数中的this都指向window
不同点
map()方法有返回值,会分配内存空间存储新数组并返回,不改变原数组
let arr = [1,22,34,15,47]
let empty = []
let newarr = arr.map((item,index)=>{
item+=1
return item
})
let newEmpty = empty.map((item,index)=>{
return item
})
console.log('newarr',newarr) //newarr [2, 23, 35, 16, 48]
console.log('arr',arr) //arr [1,22,34,15,47]
console.log('newEmpty ',newEmpty) //newEmpty []
forEach()方法没有返回值,返回undefined
let arr = [1,22,34,15,47]
let empty = []
let newarr = arr.forEach((item,index)=>{
item+=1
// arr[index]+=1 可以通过索引改变原数组
return item
})
let newEmpty = empty.forEach((item,index)=>{
return item
})
console.log('arr',arr) //arr [1,22,34,15,47]
console.log('newarr',newarr) //newarr undefined
console.log('newEmpty ',newEmpty) //newEmpty undefined
map()方法输出可以与其他方法(如reduce()、sort()、filter())链接在一起,以便在一条语句中执行多个操作。
forEach()是一个终端方法,这意味着它不能与其他方法链接,因为它返回undefined。
let arr = [1, 22, 34, 15, 47]
let newarr = arr.map((item, index) => {
item += 1
return item
}).reduce(getSum)
function getSum(total, num) {
return total + num;
}
console.log('newarr', newarr) newarr 124
如果需要跳出循环 建议使用some、every
map()和forEach() 只能通过throw error