我想在过滤后的数组中只返回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”只包含一个项目 我怎么能这样做
答案 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