2012-03-30 140 views
0

我想過濾的數組中返回僅有1項返回一個項目 我的代碼是從濾波陣列

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); 
} 

我想要的「改編」到只包含一個項目 我怎樣才能做到這一點

回答

1

如果我正確讀取了你的代碼,你試圖同步到播放聲音?然後使用Array.filter是效率低下 - 你只需要跟蹤最近通過的標記。

假設你soundPositions陣列數字順序排序,這可以在一個簡單的循環來完成:

這樣一來,只會有數組的一個迭代 - 總。 while循環從當前索引開始,並且當該值大於或等於聲音的位置時它將會退出,因此current將始終指向(虛擬)播放頭已經通過的最後一個項目。

+0

非常感謝 – JustMe 2012-03-31 09:12:58

1

你需要你想要的物品的索引。如果你只想要第一個項目,請使用:

arr[0]; 
0

另一變型從初始陣列得到一個項目:

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]; 
     } 
} 

函數「一些」上的每個項目陣列中的,直到達到一個項目,則返回true執行測試功能。所以不需要檢查整個數組。

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

+0

功能將始終從開頭的陣列環,不過,由於聲音的位置,隨着時間的增加,迭代將越來越長。 – weltraumpirat 2012-03-31 06:35:05