当前位置: 代码迷 >> Web前端 >> .剔除数组元素(转)
  详细解决方案

.剔除数组元素(转)

热度:140   发布时间:2012-11-23 22:54:33.0
.删除数组元素(转)

要删除一个或多个数组元素,或移动数组元素
解决办法
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--;
}
  相关解决方案