都是循环遍历数组中的每一项
每次执行匿名函数都支持三个参数,参数分别为item(当前每一项),index(索引值),arr(原数组)
匿名函数中的this都是指向window
只能遍历数组
不同点:
map()会分配内存空间存储新数组并返回,forEach()不会返回数据。
forEach()允许callback更改原始数组的元素。map()返回新的数组。
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
①只包含一个表达式,这时花括号和return都省略了。
var a1 = [1,2,3,4];
var a2 = a1.map(x=>x*2);
consolo.log(a2)
输出
[2,4,6,8]
②包含多条语句,这时花括号和return都不能省略。
var a1 = [1,2,3,4];
var a2 = a1.map(x=>{
if(x == 4){
return x*2;
}
})
输出 [undefined,undefined,undefined,undefined]
因为map()方法创建了一个新数组,但新数组并不是在遍历完array1后才被赋值的,而是每遍历一次就得到一个值。
var a1 = [1,2,3,4];
var a2 = a1.map(x=>{
if(x == 4){
return x*2;
}
return x;
})
输出 [2,4,6,8]
forEach方法中的function回调有三个参数:
第一个参数是遍历的数组内容,
第二个参数是对应的数组索引,
第三个参数是数组本身
var sum = 0;
var a1 = [1,2,3,4];
a1.forEach(function(value,index,arr){
if(arr[index]>2){
sum += value;
}
})
console.log(sum);
输出
7