概述
map()方法返回一个由原数组中的每个元素调用一个指定的方法后的返回值组成的新数组。
语法
array.map(callback[, thisArg])
参数
callback
原数组中的元素经过该方法后返回一个新的元素。
currentValue
callback的第一个参数,数组中当前被传递的元素。
index
callback的第二个参数,数组中当前被传递的元素的索引。
array
callback的第三个参数,调用map方法的数组。
thisArg
执行callback函数时this指向的对象。
描述
map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值组合起来形成一个新数组。callback 函数只会在有值的索引上被调用;那些从来没被赋过值或者使用 delete 删除的索引则不会被调用。
callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身。
如果 thisArg 参数有值,则每次 callback 函数被调用的时候,this 都会指向 thisArg 参数上的这个对象。如果省略了 thisArg 参数,或者赋值为 null 或 undefined,则 this 指向全局对象 。
map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)。
用法
用法一:
["1", "2", "3"].map(parseInt);
/**
* 你可能觉的会是[1, 2, 3]
* 但实际的结果是 [1, NaN, NaN]
* 使用parseInt时,只需要传递一个参数.而parseInt可以有两个参数.第二个参数是进制数.
* map方法在调用callback函数时,会给它传递三个参数:当前正在遍历的元素, 元素索引, 原数组本身.
* 第三个参数parseInt会忽视, 但第二个参数不会.
* 也就是说,parseInt把传过来的索引值当成进制数来使用.从而返回了NaN.
* 即:第一个参数正常使用,第二个当做进制数,第三个以及之后的会被忽视
*/
//应该使用如下的用户函数returnInt
function returnInt(element){
return parseInt(element,10);
}
["1", "2", "3"].map(returnInt);
// 返回[1,2,3]
用法二:
/**
* 将data,data2两个数组组合成json的格式
*/
var data = ["a","b","c","d","e","f","g","h","i","j"];
var data2 = [1,2,3,4,5,6,7,8,9,10];
//方法一:(一般项目中不会这么拼接)
var array1 = data.map(function(item){
var name = "'name'";
return name+":'"+item+"',";
});
var array2 = data2.map(function(item){
var value = "'value'";
return value+":'"+item+"'";
});
var arr = new Array();
for(var i = 0;i<data.length;i++){
arr[i] = "{"+array1[i]+array2[i]+"}";
}
var a = '['+arr+']';
document.write(a);
//方法二:(建议使用这种)
var aaa = data.map(function(item,index){
return {
name : item,
value : data2[index]
}
});
document.write(JSON.stringify(aaa));