使用Math.max()函数内的数组flash as3

时间:2011-05-05 19:12:13

标签: arrays flash actionscript-3 math

  

可能重复:
  What is the best way to get the minimum or maximum value from an Array of numbers?

嗨 - 我正在尝试使用flash的Math.max()功能来查找一组数字中的最高者。通常,这些是通过逗号分隔的数字串输入,但我需要让它循环遍历数组中的一系列数字。这个的正确语法是什么?我试过了:

var maxMemberWidth = int(Math.max(
    for (var k=0;k<memberClips.length;k++){
        memberClips[i].memeberWidth;
    }
));

但这显然不对。我有一种感觉,答案涉及运行某种单独的函数并将值返回给此函数,但我还没有完全掌握语法。

3 个答案:

答案 0 :(得分:2)

你的方法并非完全错误,你可以这样做:

// note the apply in the next line!
var maxMemberWidth:int = int(Math.max.apply(null, AllMembersWidth()));

...

private function AllMembersWidth():Array
{
    var widths:Array = [];
    for (var k:int = 0; k < memberClips.length; k++)
        widths[k] = memberClips[k].memeberWidth;
    return widths;
}

即使你有一个空数组(它返回-Infinity

,这也有效

答案 1 :(得分:1)

你可以试试这个:

var max_number:Number = memberClips[0];

for( var i:int = 1; i < memberClips.length; i++ )
{
    max_number = Math.max( max_number, memberClips[i] );
}

这样做是将最大数量初始化为数组的第一个元素,然后循环遍历数组中的所有元素,直到它到达数组的末尾。然后,您将拥有您正在寻找的最大数量。索引变量i初始化为1,因为您不需要将第一个元素与自身进行比较。您应该注意,此代码还假定您的数组中至少有一个元素。

答案 2 :(得分:1)

更精简的版本,不像红宝石那样性感,但它有效。

var widths:Array = clips.map( function(o:*, i:int, a:Array):* { return o.width; } );

var max:Number = Math.max.apply(null, widths);
var min:Number = Math.min.apply(null, widths);