今天在实现“从数组中删除一个元素”时,发现splice真是一个特别方便实用的好方法,可实现对数组
下摘自Adobe文档:
AS3 function splice(startIndex:int, deleteCount:uint, ... values):Array
给数组添加元素以及从数组中删除元素。此方法会修改数组但不制作副本。
注意:要在 Array 的子类中覆盖此方法,请使用 ...args 作为参数,如本例所示:
public override function splice(...args) { // your statements here }
参数 startIndex:int — 一个整数,它指定数组中开始进行插入或删除的位置处的元素的索引。您可以用一个负整数来指定相对于数组结尾的位置(例如,-1 是数组的最后一个元素)。
deleteCount:uint — 一个整数,它指定要删除的元素数量。该数量包括 startIndex 参数中指定的元素。如果没有为 deleteCount 参数指定值,则该方法将删除从 startIndex 元素到数组中最后一个元素的所有值。如果该参数的值为 0,则不删除任何元素。
...values — 用逗号分隔的一个或多个值的可选列表或数组,此列表或数组将插入到此数组中由 startIndex 参数指定的位置。
返回 Array — 一个数组,包含从原始数组中删除的元素。 示例
下面的代码创建 Array 对象 vegetables,其中包含元素 [spinach, green pepper, cilantro, onion, avocado]。然后,使用参数 2 和 2 调用 splice() 方法,以将 cilantro 和 onion 赋予 spliced 数组。vegetables 数组中就包含 [spinach,green pepper,avocado]。再次调用 splice() 方法(使用参数 1、0 和 spliced 数组),以将 [cilantro,onion] 作为以下数组中的第二个元素:vegetables。 var vegetables:Array = new Array("spinach", "green pepper", "cilantro", "onion", "avocado");var spliced:Array = vegetables.splice(2, 2);trace(vegetables); // spinach,green pepper,avocadotrace(spliced); // cilantro,onionvegetables.splice(1, 0, spliced);trace(vegetables); // spinach,cilantro,onion,green pepper,avocado 请注意,cilantro 和 onion 输出时好像 vegetables 有 5 个元素,但它实际上只有 4 个元素(其中第二个元素是一个包含两个元素的数组)。若要单独添加 cilantro 和 onion,可使用:
var vegetables:Array = new Array("spinach", "green pepper", "cilantro", "onion", "avocado");
var spliced:Array = vegetables.splice(2, 2);
trace(vegetables); // spinach,green pepper,avocado
trace(spliced); // cilantro,onion
vegetables.splice(1, 0, "cilantro", "onion"); trace(vegetables); // spinach,cilantro,onion,green pepper,avocado
与splice()相关的:
as3如何彻底删除数组中的一个对象
移除数组中的某个对象,比方说array数组索引号为i的对象,可以这样实现:
removeChild(array[i]);
array.splice(i, 1);
移除数组中的全部对象,要用循环一个个从显示列表中移除,因为是全部移除,不需要一个个从数组中删除了,最后将数组设为null就行了:
for(var i in array) { removeChild(array[i]); }
array = null;
在数组元素上使用 delete 运算符
delete 运算符用于将数组元素的值设置为 undefined,但它不会从数组中删除元素。例如,下面的代码在 oceans 数组的第三个元素上使用 delete 运算符,但此数组的长度仍然为 5:
var oceans:Array = ["Arctic", "Pacific", "Victoria", "Indian","Atlantic"];
delete oceans[2];
trace(oceans); // 输出:Arctic,Pacific,,Indian,Atlantic
trace(oceans[2]); // 输出:undefined
trace(oceans.length); // 输出:5
可以使用数组的 length 属性截断数组
如果将数组的 length 属性设置为小于数组当前长度的值,则会截断数组,在索引号高于 length 的新值减 1 处所存储的任何元素将被删除。
例如,如果 oceans 数组的排序是将所有有效项放在数组的开始处,则可以使用 length 属性删除数组末尾的项,如以下代码所示:
var oceans:Array = ["Arctic", "Pacific", "Victoria", "Aral","Superior"];
oceans.length = 2;
trace(oceans); // 输出:Arctic,Pacific