JavaScript数组常用的方法

改变原数组:

※ push,pop,shif,unshift,sort,reverse

※ splice

不改变原数组:

※ concat,join→split,toString,slice

push :后一位添加

pop :后一位删除

shift :前一位删除

unshift :向前一位添加

sort  :给数组排序(按ASCLL)

reverse :逆转顺序

splice :切片 

系统push方法的实现:

var arr=[1,2,3];
    Array.prototype.push=function(){
        for(var i=0; i<arguments.length; i++){
            this[this.length]=arguments[i];
        }
        return this.length;
    }

splice方法:

var arr=[1,1,2,2,3,3];
    //arr.splice(从第几位开始,截取长度,在切口处添加新数据)
    arr.splice(1,2);

arr.splice(1,1,0,0...)后面的参数无穷个

数组内部负数实现原理:

var arr=[1,2,3,4];
    splice=function(pos){
        pos += pos>0 ? 0:this.length;
    }

ASCLL排序,不是理想中的排序,我们要按照数字大小排序,sort给我们留个编程接口让我们自己实现。里面添加匿名的function(必须要写两个形参){规则}

1.必须写两形参

2.看返回值:1)当返回值为负数,那么前面的数放在前面

      2)为正数,那么后面的数放在前面

      3)为0,不动

var arr=[2,4,9,10,13,18,20];
    arr.sort(function(a,b){
        if(a>b){
            return 1;
        }else{
            return -1;
        }
    })

简化前面代码:

var arr=[2,4,9,10,13,18,20];
    arr.sort(function(a,b){
        return a-b;
    })

条件判断a-b是否大于0,直接返回a-b

给数组乱序:

 

var arr=[2,4,9,10,13,18,20];
    arr.sort(function(){
        return Math.random()-0.5;
    })

 

按字符串长度排序:

var arr=["aaa","dddd","ccccd","dd","abcddddd"];
    arr.sort(function(){
        return a.length-b.length;
    })

按字节长度排序:

function retBytes(str){
            var num=str.length;//接收字符串长度
            for(var i=0;i<str.length;i++){//遍历字符串
                if(str.charCodeAt(i)>255){//判断字符是中文还是英文字符
                    num++;//中文字符字节长度+1
                }
            }
            return num;
        }
        var arr=['ac邓','bcd邓','ccccc老邓','dddddccc','dfhionnnangh'];
        arr.sort(function (a,b){
            return retBytes(a)-retBytes(b);//比较字节是长度
        })

concat拼接,不改变原数组

slice截取,不改变原数组

join连接,参数必须字符串类型

split和join互逆的,按参数拆开

字符串拼接,这样不好,字符串放在栈内存,原始值放在栈内存存储,栈先进后出,放在箱底里的东西,箱子上面的东西拿出来再放进去,拿出来再拼到一起,来回折腾栈,效力低。

数组是散列存储结构,是堆内存,散列结构,效率会高。

猜你喜欢

转载自www.cnblogs.com/qingyang-0-0/p/9389211.html