美文网首页
实现数组方法

实现数组方法

作者: 8d2855a6c5d0 | 来源:发表于2019-01-14 14:46 被阅读0次

    首先实现join

    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    
    
    Array.prototype.myJoin = function (str) {
        var result = this[0] || '';
        var length = this.length;
    
        for (let i = 1; i < length; i++) {
            result += str + this[i];
        }
    
        return result;
    }
    
    

    实现slice

    Array.prototype.mySlice = function (start, end) {
        var start = start || 0;
        var end = end || this.length;
        var newArr = [];
    
        for (let i = start; i < end; i++) {
            newArr.push(this[i]);
        }
    
        return newArr
    }
    

    以前经常使用Array.prototype.slice.call()将伪数组转换成数组,原理就是遍历伪数组将元素放到新的数组中返回出来,es6的新方法Array.from也是同样的功能。

    实现foreachmap

    Array.prototype.myForEach = function (fn) {
        for (let i = 0; i < this.length; i++) {
            if (i in this) {
                fn.call(null, this[i], i, this);
            }
        }
    }
    
    Array.prototype.myMap = function (fn) {
        var result = [];
        var temp = null;
    
        for (let i = 0; i < this.length; i++) {
            if (i in this) {
                result[i] = fn.call(null, this[i], i, this);
            }
        }
    
        return result
    }
    

    foreachmap的实现方式基本一样区别只是有没有返回值。

    实现filter

    Array.prototype.myFilter = function (fn) {
        var result = [];
        var temp = null;
    
        for (let i = 0; i < array.length; i++) {
            if (i in this) {
                if (temp = fn.call(null, this[i], i, this)) {
                    result.push(temp);
                }
            }
        }
    
        return result;
    }
    

    实现reduce

    Array.prototype.myReduce = function (fn, init) {
        var result = init;
    
        for (let i = 0; i < this.length; i++) {
            if (i in this) {
                result = fn.call(null, this[i], i, this);
            }
        }
    
        return result
    }
    

    不清楚js源码中reduce是如何实现的,以前看大漠老师的博客讲到reduce的效率比for循环要高,想必内部不是使用了for循环。

    相关文章

      网友评论

          本文标题:实现数组方法

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