美文网首页
实现Array的map

实现Array的map

作者: zhulichao | 来源:发表于2020-07-24 09:04 被阅读0次
    Array.prototype.map = function(callback, thisArg) {  
        if (this == null) {
            throw new TypeError("this is null or not defined");
        }  
        if (Object.prototype.toString.call(callback) != "[object Function]") {
            throw new TypeError(callback + " is not a function");
        }
        // 将O赋值为调用map方法的数组. 防止callback方法中修改原数组.
        var originArr = Object(this);
        // 将len赋值为数组O的长度. 如果length未定义就取0.
        var len = originArr.length >>> 0;
        var copyArg;
        if (thisArg) {
            copyArg = thisArg;
        }
        var result = new Array(len);
        var k = 0;
        while(k < len) {
            var kValue, mappedValue;
            // 遍历O,k为原数组索引
            if (k in originArr) {
                // kValue为索引k对应的值.
                kValue = originArr[k];
                // 执行callback,this指向copyArg.
                // originArr.map((kValue, k, originArr) => {});
                mappedValue = callback.call(copyArg, kValue, k, originArr);
                // 返回值添加到新数组A中.
                result[k] = mappedValue;
            }
            k++;
        }
        return result;
    };
    

    相关文章

      网友评论

          本文标题:实现Array的map

          本文链接:https://www.haomeiwen.com/subject/mefjhktx.html