概述
map()
方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。
语法
array.map(callback[, thisArg])
或
array.map(
function(value,index,array){
return 要放入新数组的值
})
参数
function 原数组中的元素经过该方法后返回一个新的元素。 value callback 的第一个参数,数组中当前被传递的元素。 index callback 的第二个参数,数组中当前被传递的元素的索引。(常忽略) array callback 的第三个参数,调用 map 方法的数组。 thisArg 执行 callback 函数时 this 指向的对象。
callback
函数会被自动传入三个参数:数组元素,元素索引,原数组本身。
描述
map
方法会给原数组中的每个元素都按顺序调用一次 callback
函数。callback
每次执行后的返回值组合起来形成一个新数组。callback
函数只会在有值的索引上被调用;那些从来没被赋过值或者使用 delete
删除的索引则不会被调用。
map
不修改调用它的原数组本身(当然可以在 callback
执行时改变原数组)。
使用 map 方法处理数组时,数组元素的范围是在 callback 方法第一次调用之前就已经确定了。在 map 方法执行的过程中:原数组中新增加的元素将不会被 callback 访问到;若已经存在的元素被改变或删除了,则它们的传递到 callback 的值是 map 方法遍历到它们的那一时刻的值;而被删除的元素将不会被访问到。
map和array的区别:
array实例:
var list = new Array(); list.push("h"); list.push("h"); list.push("h"); //获取第二个数 list[1];
map实例:
var list = new Map(); list.put("1","h"); list.put("2","h"); list.put("3","h"); //获取key值为"2"的value值 list.2; 或 list["2"]
写一个map生成新数组的例子吧:
If(!Array.prototype.map) var arr=[1,2,3,4,5]; var newArr=arr.map(function(value,index,array){ return value*2; }); console.log(String(arr));//1,2,3,4,5原数组 console.log(String(newArr));//2,4,6,8,10新数组
有个大牛写的map实现原理,还没怎么看明白,先贴出来吧,欢迎指正切磋。
1 if(!Array.prototype.map){ 2 Array.prototype.map=function(callback){ 3 var result=[]; 4 for(var i=0;i<this.length;i++){ 5 if(i in this){//防止稀疏数组 6 result[i]=callback(this[i], i, this); 7 } 8 } 9 return result; 10 } 11 } 12 13 var arr=[1,2,3,4,5]; 14 15 var arr2=arr.map(function(value,index,arr){ 16 return value*2; 17 }); 18 document.write(String(arr2));