2012-03-30 11 views
0

ich nur 1 Element in der gefilterten Reihe zurückkehren will mein Codeein Element zurück aus gefilterten Array

private function audioProgress(event:Event):void{ 
     var wordindex:int=0; 
     function filterFun(element:int, index:int, array:Array):Boolean { 
      return (element < soundChannel.position); 
     } 
     var arr:Array=soundPositions.filter(filterFun); 
} 

I „arr“ will zu enthält nur ein Element Wie kann ich tun, dass

Antwort

1

Wenn ich Ihren Code richtig gelesen, Sie versuchen, zu einem Spiel Ton zu synchronisieren? Dann ist die Verwendung von Array.filter ineffizient - Sie müssen nur den zuletzt übergebenen Marker verfolgen.

Unter der Annahme, dass Ihr soundPositions Array numerisch sortiert ist, kann dies in einer einfachen Schleife erfolgen:

Auf diese Weise wird es nur eine Iteration des Arrays sein - total. Die while-Schleife beginnt mit dem aktuellen Index und wird beendet, wenn der Wert größer oder gleich der Position des Sounds ist. Daher zeigt current immer auf den letzten Punkt, den der (virtuelle) Abspielkopf passiert hat.

+0

Vielen Dank – JustMe

1

Sie benötigen den Index des gewünschten Artikels. Wenn Sie nur das erste Element, zu verwenden:

arr[0]; 
0

andere Variante ein Element aus der ursprünglichen Anordnung zu erhalten:

private function audioProgress(event:Event):void{ 
     var wordindex:int=0; 
     var firstRequiredItemIndex:int = -1; 
     function filterFun(element:int, index:int, array:Array):Boolean { 
      if (element < soundChannel.position) 
      { 
       firstRequiredItemIndex = index; 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

     if (soundPositions.some(filterFun)) 
     { 
      // Your element 
      soundPositions[firstRequiredItemIndex]; 
     } 
} 

Die Funktion ‚einige‘ führt eine Testfunktion für jedes Element in dem Array, bis ein Element erreicht wird, das wahr zurückgibt. Es ist also nicht notwendig, das gesamte Array zu überprüfen.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#some%28%29

+0

Die Funktion wird das Array von Anfang an immer Schleife durch, aber, und da die Position der Zeit zunimmt Sound, werden die Iterationen länger und länger. – weltraumpirat

Verwandte Themen