zoukankan      html  css  js  c++  java
  • js源码-数组中的push()和unshift()方法的源码实现

    人话不多,直接上代码,在代码中解析,不足之处请谅解:

    push()

    Array.prototype._push=function(...value){//在Array原型链上添加_push方法
        for(var i=0;i<arguments.length;i++){//按索引从小到大循环数组
            this[this.length]=arguments[i];//把入参,按照顺序,依次添加在数组的索引最大值加一的位置
        }
    }
    var arr=[231];//例子
    arr._push(1,2,3,4);//调用原型链上的_push方法
    console.log(arr);//结果:[231,1,2,3,4]
    unshift()
    Array.prototype._unshift=function(...value){ //在原型链上新增一个_unshift方法
    // this.length+arguments.length-1:数组的最新的最大索引值
    // 数组原有的元素需要整体完后挪动的最大临界索引值
        for(var i=this.length+arguments.length-1;i>arguments.length-1;i--){ 
            this[i]=this[i-arguments.length]; //此处把原有元素赋值给该元素在数组中新的索引地方
            // 第一个for循环就是把原有的元素往后挪,为参说挪出刚刚好的位置索引值
        }
        for(var k=0;k<arguments.length;k++){//入参只需要正常for循环
            this[k]=arguments[k];//数组从0开始往上按顺序添加入参元素
            // 第二个for循环其实就是把入参,按顺序在数组头部插入
        }
        return this.length;//最终返回新数组的长度
    }
    var item1=[2,3,4];//例子
    let currentLength=item1._unshift(1,2222,22222,99999);//自定义插入参数
    console.log(item1,currentLength);//打印结果:[1, 2222, 22222, 99999, 2, 3, 4] 7

    由于时间文,本次就分享两个方法,后续会陆续推出更多源码案例以及实现;

  • 相关阅读:
    SQL Server的数据库镜像实施笔记(3)
    MVC3缓存之三:MVC3中的局部缓存
    MVC3缓存之二:页面缓存中的局部动态
    SQL Server的数据库镜像实施笔记(2)
    ab工具
    数据库灾难备份,和负载均衡 主从数据库配置
    SQL Server的数据库镜像实施笔记 一
    ArcGIS version not specified. You must call RuntimeManager.
    SL命名空间书写
    通过文件tnsnames.ora连接
  • 原文地址:https://www.cnblogs.com/nimon-hugo/p/14501376.html
Copyright © 2011-2022 走看看