AS3一般从数组(对象)中删除元素

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,除了它就地工作.如果需要,您还可以为回调保留相同的接口(传递项目的索引和对原始数组的引用)以使其更加一致.