js模拟数组对象方法

作者: 马大哈tt | 来源:发表于2017-09-30 11:17 被阅读0次

    数组对象是js类库中自带的,我们使用时直接调用对象的方法就可以了,�但是我们也能自己写代码模拟这些方法,一个牛掰的程序员是可以自己写一个类库,他自己的需求写入其中,好佩服这一类人,我这大白离这水平自然是差了 N多个等级,不过可以慢慢的练,从模拟一些系统自带的对象方法做起。。。

    在这之前先说两个将会用到的知识点:
    1.prototype 可以给某个类添加属性或方法
    2.arguments:参数列表,调用的时候写了多少个参数,arguments就有几个元素。arguments是所有参数组成的数组

    接下来给大家分享几个仿写数组对象的方法:

    1.push 向数组的末尾添加一个或更多元素,并返回新的长度

    Array.prototype.myPop = function(){
            var res = this[this.length - 1];
            this.length = this.length - 1;
            return res;
        }
        console.log(a.myPop(),a);
    

    2.reverse 颠倒数组中元素的顺序

    Array.prototype.myReverse = function(){
            for(var i = 0; i < parseInt(this.length/2); i++){
                var temp = this[i] ;
                this[i] = this[this.length - 1 -i];
                this[this.length - 1 -i] = temp;
            }
        }
    

    3.nushift 向数组的开头添加一个或更多元素,并返回新的长度

    Array.prototype.myUnshift = function(){
            this.myReverse();    //调用前面自己写的myReverse方法
            for(var i = arguments.length - 1; i >= 0;i--){
                this.myPush(arguments[i]);  //调用前面自己写的myPush方法
            }
            this.myReverse();
        }
    

    4.shift 删除并返回数组的第一个元素

    Array.prototype.myShift = function(){
            this.myReverse();
            var res = this.myPop();
            this.myReverse();
            return res;
        }
    

    5.join 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔

    Array.prototype.myJoin = function(str){
            if(str === undefined){
                str = ",";    //传入的参数为空时用逗号隔开
            }
            var all = "";
            for(var i = 0; i < this.length - 1;i++){
                all = all + this[i] +str;
            }
            all  += this[this.length - 1];
            return all;
    }
    

    6 splice 删除元素,并向数组添加新元素(此方法功能较多,比上面复杂一点,大家可以看注释)

    Array.prototype.mySplice = function(index,length){
            var arr = []; // 存放拼接的新数组
            var resArr = []; // 作为返回值返回
            // 把index-length范围的数组做成数组,作为mySplice的返回值
            for(var i = index; i < index + length ;i++){
                resArr.myPush(this[i]);
            }
            // 拼接新的数组分为三部分
            // 1.范围之前,index之前
            for(var i = 0; i < index; i++){
                arr.myPush(this[i]);
            }
            // 2.参数列表里面下标2(包括2)之后的参数
            for(var i = 2; i < arguments.length; i++){
                arr.myPush(arguments[i]);
            }
            // 3.范围之后,index+length开始,到最后一个
            for(var i = index + length;i < this.length;i++){
                arr.myPush(this[i]);
            }
            // arr 新数组赋值给this this不能被赋值
            this.length = 0;
            for(var i = 0; i < arr.length; i++){
                this[i] = arr[i];
            }
    
            return resArr;
        }
    

    这是几个数组常用的方法,其他方法有兴趣的也可以自己总结,还有字符串对象的方法跟数组的方法也相似,我整理了一部分,鉴于有些方法的功能的没实现,就不分享了,�由于技术没到火候,现在有些方法整理的比较吃力, 大家若是写了欢迎跟我分享。

    相关文章

      网友评论

        本文标题:js模拟数组对象方法

        本文链接:https://www.haomeiwen.com/subject/yojgextx.html