在js1.6中新增了的数组方法map();
这是一个神奇的方法,它是一个方法,但这个方法的具体作用是不一定的,所以还依赖一定的逻辑。例如下面;
var arr = [1,1,3,5,5]
var add = function(x,y){ return x+y;}
var squear = function(x){return x*x}
var results = arr.map(squear)
alert(results)
var sum = arr.map(add);
alert(sum);
结果为
1 1 9 25 25
1 2 5 8 9
第一个结果是很容易知道的,函数就是对数组每个元素进行二次方乘积,得到的结果;
但第二过结果有点百思不得其解了,为什么会是1 2 3 8 9 。
我们留意一下add与squear函数 除了逻辑不同外,函数传参也不同,针对add函数的形参y是什么内容呢?我们先看看下面的模拟map()例子;
var arr = [1,1,3,5,5]
var add = function(x,y){ return x+y;}
var squear = function(x){return x*x}
var map = function(a,f){
var results = [];
for(var i = 0 ,len = a.length ;i < len ; i++ )
{
if(i in a)results[i] = f.call(null,a[i],i,a);
}
return results;
}
var results = map(arr,squear)
var sum = map(arr,add)
结果显示跟上面的结果是一致的。
我们看一下红色部分的代码,null代表全局对象或者this,a[i]代表数组第i个值,i代表索引,a代表数组;
我们再来看看add函数,他是默认接收两个参数,那就是每次返回的是a[i]+i相加的结果,
于是就得出刚才那个结果。
附:map,foreach()函数接收的参数一般有三个 ,顺序是 数组元素、数组索引、数组对象。