概述
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
假设有个数组arrA, arrA调用map() 方法并传入一个callback函数, arrA中每个合法元素都会调用传入的callback函数并把调用的结果 return 出来。当map()函数执行完毕之后,我们就可以得到一个新的数组arrB,其结果是arrA 数组中每一个元素都调用一个提供的函数后返回的结果。
let arrA = [1,2,3]
let arrB = arrA.map(val => {
return val+10;
})
console.log(arrA, arrB)
// [1, 2, 3]
// [11, 12, 13]
语法
let newArray = arr.map(function callback(currentValue[, index[, array]]) {
// Return element for newArray
}[, thisArg])
参数
callback
callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身:
- currentValue: 数组中正在处理的当前元素
- index: 数组中正在处理的当前元素的索引
- array:map方法被调用的数组
function callback(currentValue, index, array){
return newValue
}
thisArg
执行 callback 函数时使用的 this 值
返回值
一个新数组,每个元素都是回调函数的结果。
注意点
- callback 函数只会在有值的索引上被调用;那些从来没被赋过值或者使用 delete 删除的索引则不会被调用。
- map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)。
- 如果 thisArg 参数有值,则每次 callback 函数被调用的时候,this 都会指向 thisArg 参数上的这个对象。如果省略了 thisArg 参数,或者赋值为 null 或 undefined,则 this 指向全局对象 。
实例1
使用map 方法将字符串中每个字符存入数组
let map = Array.prototype.map
let arr = map.call("Hello World", function(char) {
return char
})
console.log(arr) // ["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"]