从过滤的数组中返回一项

时间:2012-03-30 21:23:34

标签: actionscript-3 actionscript air

我想在过滤后的数组中只返回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 个答案:

答案 0 :(得分:1)

您需要所需项目的索引。如果您只想要第一项,请使用:

arr[0];

答案 1 :(得分:1)

如果我正确阅读了您的代码,您是否尝试同步播放声音?然后使用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将始终指向(虚拟)播放头已经过的最后一项。

答案 2 :(得分: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];
        }
}

功能&#39; some&#39;对数组中的每个项执行测试函数,直到到达返回true的项。所以没有必要检查整个数组。

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