Вернуть один элемент из отфильтрованного массива - PullRequest
0 голосов
/ 31 марта 2012

Я хочу вернуть только 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);
}

Я хочу, чтобы "arr" содержал только один элемент Как я могу это сделать

Ответы [ 3 ]

1 голос
/ 31 марта 2012

Если я правильно прочитал ваш код, вы пытаетесь синхронизировать воспроизводимый звук? Тогда использование Array.filter неэффективно - вам нужно только отслеживать последний пройденный маркер.

Предполагая, что ваш массив soundPositions отсортирован по номерам, это можно сделать простым циклом:

private var current : int = 0;

private function audioProgress(event:Event):void{
    while( current < soundPositions.length -1 && 
           soundPositions[current+1] < soundChannel.position ) 
                current++; 
    doStuffWith(soundPositions[current]);
}

Таким образом, будет только одна итерация массива - всего. Цикл while начинается с текущего индекса и завершается, когда значение больше или равно позиции звука, поэтому current всегда будет указывать на последний элемент, который (виртуальный) элемент воспроизведения прошел.

1 голос
/ 31 марта 2012

Вам нужен индекс предмета, который вы хотите.Если вы просто хотите первый элемент, используйте:

arr[0];
0 голосов
/ 31 марта 2012

Другой вариант получить один элемент из исходного массива:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...