map,forEach

一、相同点:

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]

 

原文地址:https://www.cnblogs.com/init00/p/12627512.html