2011-02-02 21 views
8

No puedo hacer que la función map() funcione en absoluto con una clase Vector.¿Cómo funciona Vector map() en actionscript 3?

El resultado siempre vuelve nulo - me debe devolver un nuevo vector con los valores devueltos por la función addFive (este ejemplo obviamente no es mi caso de uso real).

La versión de matriz funciona como se esperaba.

¿Alguien ha tenido suerte al obtener el mapa() para trabajar con 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; 
    } 
+0

Confirmado: El vector v1 no se cambia con la función map(). – Stray

+0

Confirmado: Pasar v1 o la propia clase de prueba como el objeto 'this' (segundo parámetro opcional para usar donde hay una referencia de este tipo en la función) no hace ninguna diferencia. – Stray

+0

Confirmado: Hacer que la función addFive sea local al código que ejecuta el mapa tampoco hace ninguna diferencia. – Stray

Respuesta

8

Esto es un error actionscript/flash player. Parece que adobe lo ha solucionado internamente, pero a partir de Flash Player 10.1 la corrección no se ha liberado.

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

que es la causa raíz de nuestro error encontrado aquí:

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

mejor que puede hacer por ahora es seguir con el uso de matrices cuando Mapa se necesita

+2

Gracias por encontrarme eso, al menos no me estoy volviendo loco. – Stray

3

Weird ... Estoy viendo tu confirmación. Siempre se puede ir con esta solución:

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 
+0

Gracias - Estaba tratando de hacer un mayor uso de las aparentemente útiles funciones de mapa/filtro, etc. - Usualmente uso un ciclo for (var i ...) para estas cosas (más rápido que un forEach) así que volveré a long mano. Saludos por confirmarlo por mí. – Stray

Cuestiones relacionadas