forEach和map方法的区别:
forEach()和map()两个方法都是ECMA5中Array引进的新方法,主要作用是对数组的每个元素执行一次提供的函数;
总结:forEach操作数据会改变原数组,map不会改变原数组,而是会返回一个新数组。
一、相同点:
1. 都是循环遍历数组中的每一项
2. 每次执行匿名函数都支持三个参数,参数分别为item(当前每一项),index(索引值),arr(原数组)
3. 匿名函数中的this都是指向window。
4. 只能遍历数组;
二、不同点:
1. map() 会分配内存空间存储新数组并返回,forEach() 不会返回数据。
2. forEach() 允许callback更改原始数组的元素。map() 返回新的数组。
forEach()针对每一个元素执行提供的函数,对数据的操作会改变原数组。
map()不会改变原数组的值,返回一个新数组,新数组中的值为原数组调用函数处理之后的值;
map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。
let data77 = [1,2,3,4];
let arr45 = data77.map(item => {
return {
label: item,
value: ''
}
})
console.log('arr45 :>> ', arr45);
//(4) [{…}, {…}, {…}, {…}]
0: {label: 1, value: ""}
1: {label: 2, value: ""}
2: {label: 3, value: ""}
3: {label: 4, value: ""}
length: 4
上面是map的方法,如果是forEach,直接返回undefined;
var ary = [1,2,4,3];
var res = ary.forEach(function(item,index,arr){ //换map返回返回10,20,40,30,用foreach返回undefined
item*10;
})
console.log(res);//undefined; forEach会对原来的数组产生改变;