《javascript言语精炼》进修笔记 - 数组要领完成

js中数组是经常被使用到的,我们除了要进修数组的要领,还需要相识诶一下某一些要领是怎样来完成的。但是我看了《javascript言语精炼》中要领的一章,想纪录下书上的代码,以便加深印象。

Array pop()

poppush要领使得数组能够从客栈一样事情。

Array.method('pop', function(){
    return this.splice(this.length - 1, 1)[0];
});

Array push()

push要领把一个或很多个的参数附加到一个数组的尾部。

Array.method('push', function(){
    this.splice.apply( this, [this.length, 0].concat(Array.prototype.slice.apply(arguments)));
    return this.length;
});

Array shift()

shift要领移除数组中的第一个元素而且放回该元素。

Array.method('shift', function(){
    return this.splice(0, 1)[0];
});

Array.unshift()

unshift要领像push一样,用于把元素添加到数组中,但它是吧参数插进去到数组最先部份而不是尾部。

Array.method('unshift', function(){
    this.splice.apply(this, [0, 0].concat(Array.prototype.slice.apply(arguments)));
    return this.length;
});

Array splice()

splice要领从数组中移除一个或很多个元素,而且用新的参数替代它们。

Array.method('splice', function(start, deleteCount){
    var max = Math.max,
        min = Math.min,
        delta, el, 
        insertCount = max(arguments.length - 2, 0),
        k = 0,
        len = this.length,
        new_len, result = [], shift_count;

    start = start || 0;
    if (start < 0) {
        start += len;
    }
    start = max(min(start, len), 0);
    deleteCount = max(min(typeof deleteCount === 'number' ? deleteCount : len, len - start), 0);
    delta = insertCount - deleteCount;
    new_len = len + delta;
    while (k < deleteCount) {
        el = this[start + k];
        if (el !== undefined) {
            result[k] = el;
        }
        k += 1;
    }
    shift_count = len - start - deleteCount;
    if (delta < 0) {
        k = start = insertCount;
        while (shift_count) {
            this[k] = this[k - delta];
            k += 1;
            shift_count -= 1;
        }
        this.length = new_len;
    } else if (delta > 0) {
        k = 1;
        while (shift_count) {
            this[new_len - k] = this[len - k];
            k += 1;
            shift_count -= 1;
        }
        this.length = new_len;
    }
    for (k = 0; k < insertCount; k ++) {
        this[start + k] = arguments[k + 2];
    }
    return result;
});

这里只是摘抄了书上的一些实例,另有很多数组的要领能够思索怎样去完成,如果有什么不对的地方请指教,与人人共勉!

    原文作者:_我已经从中二毕业了
    原文地址: https://segmentfault.com/a/1190000002642164
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞