Vector map()如何在actionscript 3中运行?

时间:2011-02-02 14:49:53

标签: flash flex actionscript-3

我无法使用Vector类使map()函数正常工作。

结果总是返回null - 它应该返回一个带有addFive函数返回值的新向量(这个例子显然不是我真正的用例)。

阵列版本按预期工作。

有没有人有幸得到map()与Vector合作?

    public function test_vector_map():void {
        var v1:Vector.<uint> = new <uint>[1,2,3];
        trace(v1); // traces 1,2,3

        var v2:Vector.<uint> = v1.map(addFive);
        trace(v2); // traces null
    }             

    protected function addFive(item:uint, index:int, vector:Vector.<uint>):uint
    {
        return item+5;
    } 

    public function test_array_map():void {
        var v1:Array = [1,2,3];
        trace(v1); // traces 1,2,3
        var v2:Array = v1.map(addSix);
        trace(v2); // traces 7,8,9
    }             

    protected function addSix(item:uint, index:int, array:Array):uint
    {
        return item+6;
    }  

2 个答案:

答案 0 :(得分:8)

这是一个动作脚本/ flash播放器错误。似乎adobe已在内部修复它,但从Flash Player 10.1开始,该修复程序尚未发布。

请参阅: https://bugzilla.mozilla.org/show_bug.cgi?id=513095

这是我们在这里发现的bug的根本原因:

https://bugzilla.mozilla.org/show_bug.cgi?id=507501

你现在可以做的最好的事情就是在需要Map时坚持使用Arrays

答案 1 :(得分:3)

很奇怪......我看到了你的确认。你可以随时使用这个解决方案:

var v1:Vector.<uint> = new <uint>[1,2,3];
trace(v1); // traces 1,2,3

var v2:Vector.<uint> = v1.slice();
v2.forEach( addFive );
trace(v2); // traces 6,7,8