zoukankan      html  css  js  c++  java
  • JavaScript数组基本用法

    其实数组,字符串等等都是在刚开始学js的时候就开始接触了,那个时候只是进行了简单的API学习,甚至连API都还没能够记住。经过几次这样的痛苦折磨,终于决定来写一篇博文来强化一下记忆,当然里面会加入一些自己的理解。

    1 稀疏数组

    至于如何创建数组,创建数组有哪几种方式,我在这里就不在叙述。首先来讲讲什么是稀疏数组。

    稀疏数组就是包含从0开始的不连续索引的数组,通常稀疏数组的长度length属性值会大于数组的元素的个数。举个例子

         //如何产生稀疏数组
            var arr04=[];
            arr04[9]=1;
            alert(arr04.length)   //10
            alert(arr04[1]);      //undefined
            alert(1 in arr04);    //false

    例子中我们定义了一个空数组,然后指定了arr04[9]=1,此时数组的length属性值是10,但是数组的元素个数只有1个,因为当我们用in来判断索引1处是否有元素返回的是false。没有元素默认返回的是undefined。当然如果是下面这样,会返回true。

         var arr03=[0,1,2,3,null,undefined];
            alert(4 in arr03);//判断索引4是否有值,即使该索引存入的值是null和undefined也会返回true
            alert(5 in arr03);

     即使该索引存入的值是null和undefined也会返回true。

    好了关于稀疏数组就说这么多,关于稀疏数组有什么用,什么地方会用到,小弟才疏学浅,目前不得而知。

    2 删除数组元素

    数组元素删除有4种方法:delete 操作符 、pop() 、shift()和splice()。而delete不会改变元素组的长度,只是把原数组变成了稀疏数组。而pop()和shift()都会直接改变数组的长度。splice()后面再讲。

    而pop()方法是删除数组最高索引所指向的元素,shift()是删除最低索引所指向的元素即arr[0]。见例程:

            var arr05=[0,1,2,3];
            console.log(arr05.length+"---"+arr05);//4---0,1,2,3
            delete arr05[1];
            console.log(arr05.length+"---"+arr05);//---0,,2,3
            alert(1 in arr05)  //false
         var arr05=[0,1,2,3];
            arr05.pop()      
            console.log(arr05.length+"---"+arr05);  //3---0,1,2   删除数组最后一个元素,长度会减一
           var arr05=[0,1,2,3];
            arr05.shift()      
            console.log(arr05.length+"---"+arr05);  //3---1,2,3   删除数组第一个元素,长度会减一

    3 数组遍历

    相信最先想到得就是利用for循环,这也确实是一种不错的方法,这里就不在举例。

    如果想利用这种方法在遍历数组的过程中跳过元素为null、undefined和不存在的元素,我们可以这样做:

         var arr06=[1,2,3,null,4,undefined,5,,];
            for(var i=0;i<arr06.length;i++){
                if(!arr06[i])continue;
                console.log(i+"----"+arr06[i]);
            }

    当然还有遍历除存在的元素

         var arr06=[1,2,3,null,4,undefined,5,,];
            for(var i=0;i<arr06.length;i++){
                if(!(i in arr06))continue;
                console.log(i+"----"+arr06[i]);
            }

    如果想跳过元素为undefined和不存在的元素,可以这么做:

         var arr06=[1,2,3,null,4,undefined,5,,];
         for(var i=0;i<arr06.length;i++){
                if(arr06[i]===undefined)continue;
                console.log(i+"----"+arr06[i]);
            }

    然后就是利用for  in进行遍历。例:

         var arr06=[1,2,3];
            for(var index in arr06){
                console.log(index+"----"+arr06[index]);
            }

    但是利用for in会有一个问题那就当我们自定义一些原型属性时,这些属性也是被遍历出来的。例:

         var arr06=[1,2,3];
            Array.prototype.test=5;
            for(var index in arr06){
                console.log(index+"----"+arr06[index]);
            }

    当然数组内置的一些原型属性,例如join,map等等都是不可遍历的。所以一般不推荐使用这种方法,因为你可能不知道代码中别人是否在原型上面增加了方法或者属性,而导致最后for in遍历时多出了很多意料之外的结果。当然你可以采用下面的办法,把这些意料之外的结果剔除。

        for(var index in arr06){
                if(!arr06.hasOwnProperty(index))continue;
                console.log(index+"----"+arr06[index]);
            }

    还有一种方法就是利用ES5新增方法-forEach()至于该方法的介绍大家可以参见我的这篇博文

    4 数组基本方法

    join():将数组中所有的元素都转换成字符串拼接在一起,最后返回这个字符串。它接受一个参数,表示每个元素之间的分隔符,当然该参数是可选的。Array.join是String.split的逆向操作。这一组操作是非常有用的,还望大家能够理解运用。见例程:

         var arr06=[1,2,3];
            var str="1-2-3";
            console.log(arr06.join("-"));  //1-2-3  已经转换为字符串
            console.log(str.split("-"));   //["1", "2", "3"]  已经转换为数组

    reverse():就是将数组的元素顺序实现反转,比如原来是[1,2,3]实行该操作后就会变成[3,2,1]。这里我就不再举例了,想偷点懒了,写的太累了,也不想太啰嗦了。

    sort():该函数是为数组元素实现排序的一个函数,如果不传参数的话,会将数组元素按照字符串进行排序,这里我们应该都知道,字符串比较大小,实际上是比较他们的ASCII值的大小,在ASCII码中“a”的ASCII码是97而“A”的ASCII码是65,97大于65,所以字符串的比较结果应该是“a”大于“A”。在sort函数中就是逐个比较两个元素中对应位置字符的ASCII的大小。例如:“abcd”和“abce”,前面三个字符“abc”都是一样的,实际上最后比较的是“d”和“e”的ASCII码值。

    var arr07=["j","d","l"]
    console.log(arr07.sort());//["d", "j", "l"]

    当然如果数组元素是数字,那么sort函数会把数字转换成字符串进行比较,而不会进行真正的数值比价,见例程:

    var arr07=[3,15,4]
    console.log(arr07.sort());//[15, 3, 4]  应为“1”的ASCII码值小于“3”

    如果要做到真正数值上的排序,这要给sort传入一个参数,这个参数就是一个比较函数。例:

         var arr07=[3,15,4]
            console.log(arr07.sort(function(a,b){
                return a-b;
            }));   //[3, 4, 15]

    比较规则就是,假设第一个参数应该在前,比较函数应该返回一个小于0的值,在后返回一个大于0的值,如果两个数大小一样,谁在前面显得不是很重要就返回0。如果要是从大到小排,我们只需要改成 return b-a;

    concat():数组拼接。直接上例程自行体会

         var arr08=[0,1,2];
            var arr09=[3,4];
            var arr10=[5,6];
            console.log(arr08.concat(arr09));//[0, 1, 2, 3, 4]
            console.log(arr08.concat(arr09,arr10));//[0, 1, 2, 3, 4, 5, 6]
            console.log(arr08.concat(arr09,arr10,[7,8,[9,10]]));//[0, 1, 2, 3, 4, 5, 6, 7, 8, [9,10]]

    slice():返回指定数组的一个片段或者子数组。例程如下

         var arr11=[0,1,2,3,4,5,6];//
            console.log(arr11.slice(0,3));//[0, 1, 2] 
            console.log(arr11.slice(3,1));//[]  这样获取的会是空数组
            console.log(arr11.slice(3));//[3, 4, 5, 6]  没有指定第二个参数,表示截取从第三个元素一直到最后的所有数组元素
            console.log(arr11.slice(0,-1));//[0, 1, 2, 3, 4, 5]  负数代表倒数第几个  
            console.log(arr11.slice(-5,-3));//[2, 3]  截取从倒数第五个到倒数第3个之间的元素
            console.log(arr11.slice(-3,-5));//[]  空数组

    splice():该方法是在数组中插入和删除元素的通用方法。它的第一个参数指定了插入或者删除的起始位置,第二个参数表示删除的个数,如果没有指定,则表示从删除从指定位置到数组结尾的所有元素,并最后返回这个删除的元素数组。如果没有删除元素则返回一个空数组。

         var arr12=[1,2,3,4,5,6,7,8];
            console.log(arr12.splice(4)+"--原数组:"+arr12);
            console.log(arr12.splice(1,2)+"--原数组:"+arr12);
            console.log(arr12.splice(1,1)+"--原数组:"+arr12);
            console.log(arr12.splice(1,0)+"--原数组:"+arr12);

    splice()前两个参数指定了删除的起始位置和删除元素的个数,其后面任意个参数表示要插入的元素。例:

         arr12.splice(1,0,"djl");//[1, "djl", 2, 3, 4, 5, 6, 7, 8]
            arr12.splice(1,1,"djl");//[1, "djl", 3, 4, 5, 6, 7, 8]

     push()和pop():

    push()向数组末尾追加元素,pop():删除数组最后一个元素。都是会直接改变原数组的长度。不再举例了,累。

    shift()和unshift()

    shift():删除数组的第一个元素;unshift():在数组最前面添加一个元素。也都是会直接改变原数组的长度。

    toString():将每个数组元素转化为字符串并且用逗号将每个元素进行分隔,这里和不传入参数的join方法所达到的效果是一样的。

    目前就这么多了,已经够多了,能够耐心看到这里的,必须好好犒劳一下自己!

  • 相关阅读:
    更换glibc版本进行调试
    HDCTF 2020 Writeup
    Srop 原理与利用方法
    form使用DELETE被转换为GET的原因
    sqlite将时间转换为本地时间读取
    firewall-cmd命令
    windows创建系统服务命令
    Open_vSwitch操作
    Dublin Core
    CWM(Common warehouse metamodel)
  • 原文地址:https://www.cnblogs.com/djlxs/p/5414516.html
Copyright © 2011-2022 走看看