论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

真正删除数组中元素的方法

文章类别:Flash AS编程 | 发表日期:2008-10-6 18:39:54


  在flash中删除数组中的某一个元素有两种方法:一种是使用"delete",一种是使用数组中的方法"splice",可能还会有人使用附值的方法,如把要删的字符附为"undeined" or "null",好了,现在我们来测试一下这几种方法有什么区别:
[http://www.fanflash.cn 原创]

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就知道这个项有没有值:

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
视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058