首页投稿(暂停使用,暂停投稿)程序员让前端飞

js模拟数组对象方法

2017-09-30  本文已影响0人  马大哈tt

数组对象是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;
    }

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

上一篇 下一篇

猜你喜欢

热点阅读