AS知识:真正删除数组中元素的方法

  • 来源: 中国IT实验室 作者: somesun   2008-03-18/11:57
  •         在flash中删除数组中的某一个元素有两种方法:一种是使用"delete",一种是使用数组中的方法"splice",可能还会有人使用附值的方法,如把要删的字符附为"undeined" or "null",好了,现在我们来测试一下这几种方法有什么区别:

    1.使用delete删除:
    这个是我们平常删除变量时的删除方法,这种方法删除时可以把数组的某一个项给删除掉,但是他不会重新排列数组把后面的给补上来,数组的长度也不会改变.所以使用时要注意一点.因为在使用"for(var i=0;i<len;i++)"遍历数组时,无论你删除数组的多少项,无论你删除的是数组中的第一项还是最后一项,数组的长度都是保持不变,所以如果用这个方法来遍历数组,那么如"delete arr[4]",那么你遍历到arr[4]的时候他的值将是undefined,但是如你是使用"for in"来遍历数组的话,那么,使用"delete"删除的项将不会出现在枚举内,如下面程序所示:

    trace("原数组");
    var t:Array = [1, 2, 3, 4, 5, 6];
    toArrString(t);

    trace("delete删除")
    delete t[4];
    toArrString(t);
    toArrString2(t);

    /**
    * 返回数组中的无素
    * @author http://www.fanflash.cn
    * arr:要显示出项值的数组
    */
    function toArrString(arr:Array) {
    var len:Number = arr.length;
    trace("Array.length:"+len);
    for(var i in arr){
      trace("Array["+i+"]:"+arr);
    }
    trace("\n")
    }
    function toArrString2(arr:Array) {
    var len:Number = arr.length;
    trace("Array.length:"+len);
    for(var i=0;i<len;i++){
      trace("Array["+i+"]:"+arr);
    }
    trace("\n")
    }

    ----------output--------------
    原数组
    Array.length:6
    Array[5]:6
    Array[4]:5
    Array[3]:4
    Array[2]:3
    Array[1]:2
    Array[0]:1


    delete删除
    Array.length:6
    Array[5]:6
    Array[3]:4
    Array[2]:3
    Array[1]:2
    Array[0]:1


    Array.length:6
    Array[0]:1
    Array[1]:2
    Array[2]:3
    Array[3]:4
    Array[4]:undefined
    Array[5]:6



    另外delete还可以删除splice无能为力的非数值下标的数组项:

    trace("原数组");
    var t:Array = [1, 2, 3, 4, 5, 6];
    t["www.fanflash.cn"]=123
    toArrString(t);

    trace("delete删除")
    delete t["www.fanflash.cn"]
    toArrString(t);

    /**
    * 返回数组中的无素
    * @author http://www.fanflash.cn
    * arr:要显示出项值的数组
    */
    function toArrString(arr:Array) {
    var len:Number = arr.length;
    trace("Array.length:"+len);
    for(var i in arr){
      trace("Array["+i+"]:"+arr);
    }
    trace("\n")
    }

    ----------output--------------

    原数组
    Array.length:6
    Array[www.fanflash.cn]:123
    Array[5]:6
    Array[4]:5
    Array[3]:4
    Array[2]:3
    Array[1]:2
    Array[0]:1


    delete删除
    Array.length:6
    Array[5]:6
    Array[4]:5
    Array[3]:4
    Array[2]:3
    Array[1]:2
    Array[0]:1

    再讲一下数组的小点滴,记得我在有一篇教程里面讲过了,数组的长度是由最大的数值下标决定的,并不是由数组中有多少元素决定的,非数值型下标的元素不在长度的记算之中(其实就算是数值的,也只有最高位在计算之中),也就是说你新建一个数组,如附一值array[1000]=34,那么,他的长度就是1000+1=1001.


    2.使用splice删除:
    使用splice删除与delete的区别有两点,第一点是它只能删除是数值下标的项,第二点是他删除完后会把删除项的空用后面的数据补充,并且数组长度也会相应减少,因此这个才是真正的删除:

    trace("原数组");
    var t:Array = [1, 2, 3, 4, 5, 6];
    toArrString(t);

    trace("splice删除");
    t.splice(3, 1);
    toArrString(t);
    toArrString2(t);


    /**
    * 返回数组中的无素
    * @author http://www.fanflash.cn
    * arr:要显示出项值的数组
    */
    function toArrString(arr:Array) {
    var len:Number = arr.length;
    trace("Array.length:"+len);
    for (var i in arr) {
      trace("Array["+i+"]:"+arr);
    }
    trace("\n");
    }
    function toArrString2(arr:Array) {
    var len:Number = arr.length;
    trace("Array.length:"+len);
    for (var i = 0; i<len; i++) {
      trace("Array["+i+"]:"+arr);
    }
    trace("\n");
    }

    ----------output--------------

    原数组
    Array.length:6
    Array[5]:6
    Array[4]:5
    Array[3]:4
    Array[2]:3
    Array[1]:2
    Array[0]:1


    splice删除
    Array.length:5
    Array[4]:6
    Array[3]:5
    Array[2]:3
    Array[1]:2
    Array[0]:1


    Array.length:5
    Array[0]:1
    Array[1]:2
    Array[2]:3
    Array[3]:5
    Array[4]:6

    可以看到数组的第四项已经被后面的数据所代替,而长度也减少一.


    2.使用undefined or null附值:
    很遗憾,这不是VB,所以这种方法并不是真正删除这个值,无论使用那种方法遍历都是有这个项的存在,只是这个项的值特殊了一点,不过用这方法来标记这个数据已经不存在还是可以的,在使用时判断这个值是否等于undefined 或者 unll就知道这个项有没有值:#p#分页标题#e#

    trace("原数组");
    var t:Array = [1, 2, 3, 4, 5, 6];
    toArrString(t);

    trace("附值undefined or null");
    t[1]=undefined
    t[2]=null
    toArrString(t);
    toArrString2(t);


    /**
    * 返回数组中的无素
    * @author http://www.fanflash.cn
    * arr:要显示出项值的数组
    */
    function toArrString(arr:Array) {
    var len:Number = arr.length;
    trace("Array.length:"+len);
    for (var i in arr) {
      trace("Array["+i+"]:"+arr);
    }
    trace("\n");
    }
    function toArrString2(arr:Array) {
    var len:Number = arr.length;
    trace("Array.length:"+len);
    for (var i = 0; i<len; i++) {
      trace("Array["+i+"]:"+arr);
    }
    trace("\n");
    }

    ----------output--------------
    原数组
    Array.length:6
    Array[5]:6
    Array[4]:5
    Array[3]:4
    Array[2]:3
    Array[1]:2
    Array[0]:1


    附值undefined or null
    Array.length:6
    Array[5]:6
    Array[4]:5
    Array[3]:4
    Array[2]:null
    Array[1]:undefined
    Array[0]:1


    Array.length:6
    Array[0]:1
    Array[1]:undefined
    Array[2]:null
    Array[3]:4
    Array[4]:5
    Array[5]:6

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多