2012-03-30 4 views
0

Я хочу вернуть только один элемент в отфильтрованной массиве мой кодВозвращение один элемент из отфильтрованного массива

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

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

Функция «некоторые» выполняет функцию тестирования по каждому элементу массива, пока не будет достигнут элемент, который возвращает истину. Поэтому нет необходимости проверять весь массив.

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

+0

функция будет всегда цикл через массив с самого начала, хотя, и с тех пор положение увеличивает уровень в течение долгого времени, витки станут длиннее и длиннее. – weltraumpirat

Смежные вопросы