Ami*_*itd 5 generic-programming actionscript-3
有没有办法一般从数组中删除一个对象?
(可能没有使用array.filter或创建一个新数组)
例:
var arr:Array= new Array();
//create dummy objs
for (var i:uint=0; i < 10; i++){
var someObject:SomeClassObject = new SomeClassObject();
someObject.Name ="Amit"+ i;
someObject.Site="http://www.mysite.com/"+i;
//...many more props
arr.push(someObject);
}
//
removeElement("Amit4",arr);
removeElement("Amit8",arr);
//...so on so forth
Run Code Online (Sandbox Code Playgroud)
目前我正在使用array.splice()来删除对象
for (var i:Number=0; i < arr.length; i++)
{
if (arr[i].Name == element)
{
arr.splice(i, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
我想以这样的方式编写removeElement,我可以将它用于不同类型的对象.
目前removeElement依赖于implmentation ..
假设我想从给定文件名的文件数组中删除文件.我必须通过更改条件再次写入"removeElement".
也许我可以改变标准变量标准?例如:
arr= removeElement("Site","http://www.mysite.com/6",arr)
Run Code Online (Sandbox Code Playgroud)
将从"站点"属性等于"http://www.mysite.com/6"的arr中删除对象(使用上面的示例)
ie. removeElement(criteria:object,criteria_value(s):object,arr)
Run Code Online (Sandbox Code Playgroud)
谢谢大家.
Abi*_*ham 14
使用
if(array.indexOf(obj) != -1)
array.splice(array.indexOf(obj),1);
Run Code Online (Sandbox Code Playgroud)
Jua*_*ano 10
我认为最灵活的方法是接下来的方法Array::filter.由调用者决定是否应该通过函数回调将项目从列表中过滤掉.
现在,如果你想做到这一点,你可以编写一个这样的简单函数:
function remove(list:Array,callback:Function):Array {
for(var i:int = list.length - 1; i >= 0; i--) {
if(!callback(list[i])) {
list.splice(i,1);
}
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
这将返回列表,因为如果您想链接调用可能很方便,但它会对您传递的数组起作用,而不是创建新数组.
还要注意它向后循环.否则,拼接会让你获得虚假结果.
你可以像这样使用它:
var arr:Array = [1,2,9,10,455];
trace(arr);
function removeCallback(item:Number):Boolean {
return item < 10;
}
remove(arr,removeCallback);
trace(arr);
Run Code Online (Sandbox Code Playgroud)
这样您就不会受到平等(或不平等)的限制.调用者通过分别返回true或false来确定是保留还是删除该项(以匹配filter).所以,它非常像filter,除了它就地工作.如果需要,您还可以为回调保留相同的接口(传递项目的索引和对原始数组的引用)以使其更加一致.
| 归档时间: |
|
| 查看次数: |
52245 次 |
| 最近记录: |