一、相同点:
1.都是循环遍历数组中的每一项
2.每次执行匿名函数都支持三个参数,参数分别为item(当前每一项),index(索引值),arr(原数组)
3.匿名函数中的this都是指向window
4.只能遍历数组
二、不同点
1.map()会分配内存空间存储新数组并返回,forEach()不会返回数据。
2.forEach()允许callback更改原始数组的元素(现在还不是很懂)。map()返回新的数组。
map:新数组,有返回
var array = [1, 2, 3, 4]; let forEachArr = array.forEach((value,index,array)=> { array[index] = value*10; return value*2 }); console.log(forEachArr) //undefined 不会生成新数组 console.log(array) //[10, 20, 30, 40] 直接更改原始数据
foreach:无返回
var array = [1, 2, 3, 4]; let mapArr = array.map((value,index,array)=>{ array[index] = value*10; return value*2 }); console.log(mapArr) // [2, 4, 6, 8] // 返回生成新数组 return console.log(array) // [10, 20, 30, 40] 直接更改原数组
1、map:
eg:
map()方法创建了一个新数组,但新数组并不是在遍历完array1后才被赋值的,而是每遍历一次就得到一个值
var array = [1,4,9,16]; const map = array.map(x => x *2); console.log(map); //> Array [2,8,18,32]
var array = [1, 4, 9, 16]; const map = array.map(x => { if (x == 4) { return x * 2; } }); console.log(map); //Array [undefined, 8, undefined, undefined]
var array = [1, 4, 9, 16]; const map = array.map(x => { if (x == 4) { return x * 2; } return x; }); console.log(map); //Array [1,8,9,16]