检索值和删除数组元素

用于检索索引数组中的元素值的最简单方法是使用数组访问 ([]) 运算符。若要检索索引数组元素的值,请在赋值语句的右侧使用 Array 或 Vector 对象名称和索引编号:

var myFavoriteSong:String = songTitles[3];

可以尝试使用不存在元素的位置的索引来检索 Array 或 Vector 中的值。在这种情况下,Array 对象返回未定义的值,而 Vector 会引发 RangeError 异常。

可以使用 Array 和 Vector 类的三种方法(pop()shift()splice())删除元素。pop() 方法用于从数组末尾删除一个元素。换言之,它将删除位于最大索引号处的元素。shift() 方法用于从数组开头删除一个元素,也就是说,它始终删除索引号 0 处的元素。splice() 方法既可用来插入元素,也可以删除任意数目的元素,其操作的起始位置位于由发送到此方法的第一个参数指定的索引号处。

下面的示例使用所有三种方法从 Array 实例中删除元素。该示例创建一个名为 oceans 的 Array,用于存储较大水域的名称。Array 中的某些名称为湖泊的名称而非海洋的名称,因此需要将其删除。

首先,使用 splice() 方法删除项 AralSuperior,并插入项 AtlanticIndian。传递给 splice() 的第一个参数是整数 2,它表示应从列表中的第三个项(即索引 2 处)开始执行操作。第二个参数 2 表示应删除两个项。其余两个参数 AtlanticIndian 是要在索引 2 处插入的值。

然后,使用 pop() 方法删除数组中的最后一个元素 Huron。最后,使用 shift() 方法删除数组中的第一个项 Victoria

var oceans:Array = ["Victoria", "Pacific", "Aral", "Superior", "Indian", "Huron"]; 
oceans.splice(2, 2, "Arctic", "Atlantic"); // replaces Aral and Superior 
oceans.pop(); // removes Huron 
oceans.shift(); // removes Victoria 
trace(oceans);// output: Pacific,Arctic,Atlantic,Indian

pop()shift() 方法均返回已删除的项。对于 Array 实例,由于数组可以包含任意数据类型的值,因而返回值的数据类型为 Object。对于 Vector 实例,返回值的数据类型是 Vector 的基本类型。splice() 方法返回包含所删除的值的 Array 或 Vector。可以更改 oceans Array 示例,以使 splice() 调用将返回的 Array 分配给新的 Array 变量,如下面的示例所示:

var lakes:Array = oceans.splice(2, 2, "Arctic", "Atlantic"); 
trace(lakes); // output: Aral,Superior

您可能会遇到对 Array 对象元素使用 delete 运算符的代码。delete 运算符会将 Array 元素的值设置为 undefined,但它不会从 Array 中删除元素。例如,下面的代码对 oceans Array 中的第三个元素使用 delete 运算符,但此 Array 的长度仍然为 5:

var oceans:Array = ["Arctic", "Pacific", "Victoria", "Indian", "Atlantic"]; 
delete oceans[2]; 
trace(oceans);// output: Arctic,Pacific,,Indian,Atlantic 
trace(oceans[2]); // output: undefined 
trace(oceans.length); // output: 5

可以使用数组的 length 属性截断 Array 或 Vector。如果您将某个索引数组的 length 属性设置为小于该数组的当前长度的长度,则该数组会被截断,从而删除存储在比 length 的新值减 1 大的索引编号处的所有元素。例如,如果 oceans 数组进行了排序,以使所有有效项都位于数组开头,则可以使用 length 属性删除位于数组后部的项,如下面的代码所示:

var oceans:Array = ["Arctic", "Pacific", "Victoria", "Aral", "Superior"]; 
oceans.length = 2; 
trace(oceans); // output: Arctic,Pacific
注: 如果某个 Vector 对象的 fixed 属性为 true,则不能更改该 Vector 中的元素数。如果尝试使用此处介绍的方法删除固定长度 Vector 中的元素或截断固定长度 Vector,则会发生错误。