模拟js数组方法map()

来源:互联网 发布:中华软件网 编辑:程序博客网 时间:2024/06/07 12:59

在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()函数接收的参数一般有三个 ,顺序是 数组元素、数组索引、数组对象。

 

 

原创粉丝点击