手动实现js常用api

281 阅读1分钟

1. 用es5实现map

Array.prototype.myMap = function(fn, context) {
    var arr = Array.prototype.slice.call(this);
    var tempArr = [];
    for(var i = 0; i < arr.length; i++) {
        tempArr.push(fn.call(context, arr[i], i, this));
    }
    return tempArr;
}

2. 用es5实现filter方法

Array.prototype.myFilter = function(fn, context) {
    var arr = Array.prototype.slice.call(this);
    var tempArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (fn.call(context, arr[i], i, this)) {
            tempArr.push(arr[i]);
        }
    }
    return tempArr;
};

3. 用es5实现some方法

Array.prototype.mySome = function(fn, context) {
    var arr = Array.prototype.slice.call(this);
    var flag = false;
    for (var i = 0; i < arr.length; i++) {
        if (fn.call(context, arr[i], i, this)) {
            flag = true;
            break;
        }
    }
    return flag;
};

4. 用es5实现every方法

Array.prototype.myEvery = function(fn, context) {
    var arr = Array.prototype.slice.call(this);
    var flag = true;
    for (var i = 0; i < arr.length; i++) {
        if (!fn.call(context, arr[i], i, this)) {
            flag = false;
            break;
        }
    }
    return flag;
};

5. 用es5实现reduce方法

Array.prototype.myReduce = function(fn, initialValue) {
    var arr = Array.prototpye.slice.call(this);
    var res, startIndex;
    res = initialValue ? initialValue : arr[0];
    startIndex = initialValue ? 0 : 1;
    for(var i = 0; i < arr.length; i++) {
        res = fn.call(null, res, arr[i], i, this);
    }
    return res
}