资讯专栏INFORMATION COLUMN

《javascript语言精粹》学习笔记 - 数组方法实现

felix0913 / 1547人阅读

摘要:在中数组是经常被使用到的,我们除了要学习数组的方法,还需要了解诶一下某一些方法是如何来实现的。然而我看了语言精粹中方法的一章,想记录下书上的代码,以便加深印象。方法移除数组中的第一个元素并且放回该元素。

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://www.ucloud.cn/yun/85601.html

相关文章

  • 【阅读笔记javascript 语言精粹

    摘要:前言由于最近的项目用到了一些的代码,所以我带着好奇心,认真阅读了这本书,粗略地了解语言的基本结构和特性,对于一些不熟悉的新概念,以记录的形式加强印象,也是对学习的反思总结。 前言 由于最近的项目用到了一些js的代码,所以我带着好奇心,认真阅读了这本书,粗略地了解js语言的基本结构和特性,对于一些不熟悉的新概念,以记录的形式加强印象,也是对学习的反思总结。 一、字面量(literals...

    tangr206 评论0 收藏0
  • JavaScript 语言精粹》 读书笔记 - 函数(二)

    摘要:对象被传递到从句中被捕获。一些语言提供了尾递归优化。这意味着如果一个函数返回自身递归调用的结果,那么调用的过程会被替换为一个循环,可以显著提高速度。构建一个带尾递归的函数。语言精粹读书笔记函数 第四章 函数 Functions (二) 参数 arguments arguments数组: 函数可以通过此参数访问所有它被调用时传递给它的参数列表,包括哪些没有被分配给函数声明时定义的形式参数...

    lufficc 评论0 收藏0
  • javascript语言精粹学习笔记 - 递归函数

    摘要:递归函数就是会直接或者间接地调用自身的一种函数。一般来说,一个递归函数调用自身去解决它的子问题。书上第二个例子是说递归函数可以非常高效率的操作树形结构,比如。有一些语言提供了尾递归的优化。好运的是,给我们带来了尾递归,详细迎接使用尾递归。 递归函数就是会直接或者间接地调用自身的一种函数。递归是一种强大的编程技术,它把一问题分解为一组相似的子问题,每一个都用一个寻常解去解决。一般来...

    Ryan_Li 评论0 收藏0
  • JavaScript 语言精粹》读书笔记 - 函数

    摘要:语言精粹读书笔记第四章函数函数字面量函数字面量包含个部分第一部分,保留字第二部分,函数名,它可以被忽略。这个超级延迟绑定使得函数对高度复用。构造器调用模式一个函数,如果创建的目的就是希望结合的前缀来调用,那它就被称为构造器构造。 《JavaScript 语言精粹》 读书笔记 第四章 函数 Functions 函数字面量 函数字面量包含4个部分: 第一部分, 保留字 function...

    wdzgege 评论0 收藏0
  • javascript语言精粹学习笔记 - 对象

    摘要:对象适用于汇集和管理数据。一个对象字面量就是包围在一对花括号的多个名值对。尝试从对象里取值将会导致异常。亦不会触及原型链中的任何对象。严格模式下,不能用删除显式声明的标识符,名称或具名函数。 Javascirpt里的对象是无类型的。它对新属性的名字和属性的值没有任何的限制。对象适用于汇集和管理数据。对象可以包括其他对象,所以它们可以容易地表示成树状或者图形结构。 对象字面量 ...

    LoftySoul 评论0 收藏0

发表评论

0条评论

felix0913

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<