JavaScript中map和forEach

2,152 阅读2分钟

forEach()

forEach() 方法对数组的每个元素执行一次给定的函数。

语法

arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
callback:表示执行的函数;
currentValue:表示当前执行的元素;
index:可选,表示执行元素的索引;
array:可选,表示执行的数组;
thisArg:可选,当执行回调函数 callback 时,用作 this 的值。
返回值:undefined

用法

forEach()方法按升序为数组中含有效值的每一项执行一次 callback 函数,那些已删除或者未初始化的项将被跳过。
forEach() 遍历的范围在第一次调用 callback 前就会确定。如果已经存在的值被改变,则传递给 callback 的值是 forEach() 遍历到他们那一刻的值。
forEach()与map()不同的是forEach总是返回undefined
forEach() 不会直接改变调用他的数组,但数组能被callback函数改变。

注:除程序异常外,forEach()无法终止或跳出。
如果需要对数组元素进行判断,可以使用for循环、for...in、every()、some()等方法。

示例

  1. 输出数组的元素
var arr=[1,3,5,,9];
    arr.forEach(function(item){
        console.log(item);
    })
    //输出结果
    //1
    //3
    //5
    //9
    //注意,数组中元素5和元素9之间空缺的元素未被输出

map()

map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。

语法

var new_arr=arr.map(function callback(item[,index[,arr]]){
    //return值组成新数组
}[, thisArg])

callback:生成新数组的函数。
item:表示当前操作的元素。
index:可选,表示当前操作元素的下标。
arr:可选,表示当前操作的数组。
thisArg:执行 callback 函数时值被用作this。
返回值:返回值组成新数组。

用法

map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值(包括 undefined)组合起来形成一个新数组。
map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)。
map 方法处理数组元素的范围是在 callback 方法第一次调用之前就已经确定了。调用map方法之后追加的数组元素不会被callback访问。

示例

  1. 复制数组
var arr=[1,3,5,,9];
        var arr1=arr.map(function(item){
            return item;
        })
        console.log(arr1);
    //输出结果为[1, 3, 5, empty, 9]
    //map可以复制数组中的空元素
  1. 返回一个新数组,新数组元素值为原来元素值的开方
var arr = [1,4,9,16];

arr = arr.map(Math.sqrt);

console.log(arr);
//结果为[1,2,3,4]