Jos*_*hua 6 apache-flex air actionscript-3
我有一个对象数组.每个对象都有一个名为name的属性.我想有效地从数组中删除具有特定名称的对象.这是最好的方式吗?
  private function RemoveSpoke(Name:String):void {
    var Temp:Array=new Array;
    for each (var S:Object in Spokes) {
      if (S.Name!=Name) {
        Temp.push(S);
      }
    }
    Spokes=Temp;
  }
Run Code Online (Sandbox Code Playgroud)
    Qua*_*ndo 12
如果你愿意在查找表上花一些内存,这将非常快:
private function remove( data:Array, objectTable:Object, name:String):void {
var index:int = data.indexOf( objectTable[name] );
objectTable[name] = null;
data.splice( index, 1 );
}
Run Code Online (Sandbox Code Playgroud)
对此的测试如下所示:
private function test():void{
var lookup:Object = {};
var Spokes:Array = [];
for ( var i:int = 0; i < 1000; i++ )
{
    var obj:Object = { name: (Math.random()*0xffffff).toString(16), someOtherProperty:"blah" };
    if ( lookup[ obj.name ] == null )
    {
        lookup[ obj.name ] = obj;
        Spokes.push( obj );
    }
}
var t:int = getTimer();
for ( var i:int = 0; i < 500; i++ )
{
    var test:Object = Spokes[int(Math.random()*Spokes.length)];
    remove(Spokes,lookup,test.name)
}
trace( getTimer() - t );
Run Code Online (Sandbox Code Playgroud)
}
最快的方法是:
function remove(array: Array, name: String): void {
  var n: int = array.length
  while(--n > -1) {
    if(name == array[n].name) {
      array.splice(n, 1)
      return
    }
   }
}
remove([{name: "hi"}], "hi")
Run Code Online (Sandbox Code Playgroud)
如果要删除与给定谓词匹配的所有alement,也可以删除return语句.