【编程进阶】js实现一个map函数

大湾区搬砖
  • 7

实现一个myOwnMap函数:
输入:

[1,2,3].myOwnMap((item, index) => {
    return item *2
})

输出: [2,4,6]

回复
阅读 1.7k
3 个回答
✓ 已被采纳

首先要搞清楚map()函数的用法,传入一个函数,函数允许传三个参数(数组每一项,数组索引,数组本身),并且map()函数有返回值,如此一来也就有思路了:

   Array.prototype.newMap = function(fn,context){
        if(typeof fn !== 'function')return;
        var newArr = [];
        for(var i = 0;i < this.length;i++){
            newArr.push(fn.call(context,this[i],i,this,context));
        }
        return newArr;
    }
    //调用
    [1,2,3].newMap(function(item){
        return item * 2;
    });//[2,4,6]



数组的各种遍历方法本质其实就是 reduce,所以可以利用 reduce 实现,简易实现版本:

Array.prototype.myOwnMap = function(cb){
    return this.reduce(function(a, c, idx){
        a.push(cb(c, idx, this))
        return a
    }, [])
}
Array.prototype.myOwnMap = function(callback,context){  
    context = context || window;  
    if('map' in Array.prototye) {  
        return this.map(callback,context);  
    }  
    //IE6-8下自己编写回调函数执行的逻辑  
    var newAry = [];  
    for(var i = 0,len = this.length; i < len;i++) {  
        if(typeof  callback === 'function') {  
            var val = callback.call(context,this[i],i,this);  
            newAry[newAry.length] = val;  
        }  
    }  
    return newAry;  
}  
你知道吗?

宣传栏