map():
下面看一段代码:
let arr = [3,6,9,12]
let newArr = arr.map(function(item,index,arr){
console.log('arr',arr)
return item/3
},this)
console.log('arr:',arr)
console.log('newArr',newArr)
输出结果:
arr [3,6,9,12]
arr [3,6,9,12]
arr [3,6,9,12]
arr [3,6,9,12]
arr: [3,6,9,12] //注意这里有冒号
newArr [1,2,3,4]
forEach
代码:
let arr1 = [3,6,9,12]
let newArr1 = arr1.forEach(function(item,index,arr1){
console.log('arr1',arr1)
return arr[index] = item/3;
},this)
console.log('arr1:',arr1)
console.log('newArr1',newArr1)
结果:
arr1 [3,6,9,12]
arr1 [1,6,9,12]
arr1 [1,2,9,12]
arr1 [1,2,3,12]
arr1: [1,2,3,4]
newArr1 undefined
两者的区别
我们从上面可以看出来这两者的区别:
map : 不会改变原有的数组,遍历会返回一个新的数组。
forEach: 不会返回一个新的数组,但是会改变原有的数组。
共同点
1、循环遍历数组
2、只能适用于数组结构
3、可带三个参数
适用场景
不改变原数据时使用map。
forEach适用于对数组操作并想改变原数组值时。
总结
能用forEach()做到的,map()同样可以。反过来也是如此。
map()会分配内存空间存储新数组并返回,forEach()不会返回数据。
forEach()允许callback更改原始数组的元素。map()返回新的数组。