2011-02-02 31 views
8

Tôi không thể làm cho hàm map() hoạt động hoàn toàn với lớp Vector.Bản đồ Vector() hoạt động như thế nào trong ActionScript 3?

Kết quả luôn quay trở lại null - nó sẽ trả lại cho tôi một vectơ mới với các giá trị được hàm trả về trả về (ví dụ này rõ ràng không phải là usecase thực của chúng tôi).

Phiên bản mảng hoạt động như mong đợi.

Có ai có may mắn lấy bản đồ() để làm việc với Vector không?

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

Đã xác nhận: Vector phiên bản 1 không bị thay đổi bởi hàm map(). – Stray

+0

Đã xác nhận: Vượt qua một trong hai hoặc bản thân lớp thử nghiệm làm đối tượng 'this' (tham số tùy chọn thứ hai để sử dụng khi có tham chiếu này trong hàm) không có sự khác biệt. – Stray

+0

Đã xác nhận: Làm cho hàm addFive cục bộ thành mã chạy bản đồ cũng không tạo ra bất kỳ sự khác biệt nào. – Stray

Trả lời

8

Đây là lỗi trình phát/hành động flash. Có vẻ như adobe đã sửa nó trong nội bộ nhưng với Flash Player 10.1 bản sửa lỗi chưa được phát hành.

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

đó là nguyên nhân gốc rễ của lỗi của chúng tôi tìm thấy ở đây:

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

điều tốt nhất bạn có thể làm bây giờ là gắn bó với sử dụng Mảng khi Bản đồ là cần thiết

+2

Cảm ơn vì đã tìm ra điều đó cho tôi - ít nhất tôi cũng không bị điên. – Stray

3

Lạ ... Tôi thấy xác nhận của bạn. Bạn luôn có thể sử dụng giải pháp này:

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

Cảm ơn - Tôi đã cố gắng sử dụng nhiều chức năng bản đồ/bộ lọc dường như hữu ích hơn - tôi thường sử dụng vòng lặp for (var i ...) cho những thứ này (nhanh hơn forEach) vì vậy tôi sẽ quay lại lâu tay. Chúc mừng cho việc xác nhận nó cho tôi. – Stray

Các vấn đề liên quan