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

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

  • 相关阅读:
    UED
    内容分发网络CDN(互联网技术)
    分布式系统基础架构
    十六进制后按高低位分开(转)
    Kafka.net使用编程入门(二)
    Storm集成Kafka应用的开发
    .net 框架
    .NET 的 WebSocket 开发包比较(转)
    ASP.NET Web API上实现 Web Socket
    Scrapyd部署爬虫
  • 原文地址:https://www.cnblogs.com/nimon-hugo/p/14501376.html
Copyright © 2011-2022 走看看