5.4.删除数组元素

问题
我要删除一个或多个数组元素,或移动数组元素
解决办法
splice( ) 方法删除指定位置的元素,pop( ) 删除尾部元素,shift( ) 删除首部元素
讨论
删除指定位置的元素使用splice( ) 方法,它需要两个参数:
start
开始下标
deleteCount
删除的元素个数,如果没有定义,则从起始位置到末尾全部删除:
+展开
-ActionScript
var letters:Array = ["a""b""c""d"];
//从下标1开始删除1个元素
letters.splice(1, 1);
// 显示结果,现在只剩三个
// "a", "c", 和"d".
for (var i:int = 0; i < letters.length; i++) {
trace(letters [i]);
}

splice( ) 方法也返回一个新的包含删除的元素数组:
+展开
-ActionScript
var letters:Array = ["a""b""c""d"];
//删除两个元素,从0位置开始
var deleted:Array = letters.splice(0, 2);
// 显示: "a","b".
for (var i:int = 0; i < deleted.length; i++) {
trace(deleted[i]);
}

删除首部和尾部的元素可用shift( ) 和pop( ) 方法。shift( ) 方法删除首部第一个元素,然后返回该元素,pop( ) 方法删除尾部的元素并返回该值:
+展开
-ActionScript
var letters:Array = ["a""b""c""d"];

trace(letters.shift( ));
trace(letters.pop( ));
//显示剩下的元素
for (var i = 0; i < letters.length; i++) {
trace(letters[i]);
}

在for循环里删除原始,也要修改下标值,下面的代码演示不更新下标值变量出现的情况:
+展开
-ActionScript
var numbers:Array = new Array(4, 10);
numbers[4] = 1;
trace(numbers); // 显示: 4,10,undefined,undefined,1
for(var i:int = 0; i < numbers.length; i++) {
if(numbers[i] == undefined) {
numbers.splice(i, 1);
}
}
trace(numbers); // 显示: 4,10,undefined,1

上面的代码本来是期望上出全部undefined 元素的,结果只删除一个,调试运行,看看发生了什么:
1。前两个循环什么都没做,因为都不是undefined.
2。第三次找到undefined 然后删除它,这时,第4个和第5个元素下移变成了第3个和第4个元素
3。下一循环检测第4个元素,也就是最后一个,这时忽略了第3个元素也就是那个undefined 元素,因此,当删除元素,应该把小标变量-1,代码应该这样:
+展开
-ActionScript
var numbers:Array = new Array(4, 10);
numbers[4] = 1;
trace(numbers); // 显示: 4,10,undefined,undefined,1
for(var i:int = 0; i < numbers.length; i++) {
if(numbers[i] == undefined) {
numbers.splice(i, 1);
i--;
}
}
trace(numbers); // 显示: 4,10,1

加支付宝好友偷能量挖...


评论(0)网络
阅读(191)喜欢(0)flash/flex/fcs/AIR