2011-02-02 15 views
8

मैं एक वेक्टर वर्ग के साथ काम करने के लिए मानचित्र() फ़ंक्शन को पाने में असमर्थ हूं।वेक्टर मानचित्र() वर्कस्क्रिप्ट 3 में कैसे काम करता है?

परिणाम हमेशा वापस आ जाता है - इसे मुझे एडफिव फ़ंक्शन द्वारा लौटाए गए मानों के साथ एक नया वेक्टर वापस करना चाहिए (यह उदाहरण स्पष्ट रूप से मेरा वास्तविक उपयोग नहीं है)।

सरणी संस्करण अपेक्षा के अनुसार काम करता है।

क्या किसी को भी वेक्टर के साथ काम करने के लिए नक्शा() प्राप्त करने में कोई भाग्य है?

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

पुष्टि की गई: v1 वेक्टर मानचित्र() फ़ंक्शन द्वारा नहीं बदला गया है। – Stray

+0

पुष्टि की गई: या तो v1 या test class को 'इस' ऑब्जेक्ट के रूप में पास करना (फ़ंक्शन में कोई संदर्भ है जहां उपयोग के लिए दूसरा वैकल्पिक पैरामीटर) कोई फर्क नहीं पड़ता। – Stray

+0

पुष्टि की गई: नक्शा चलाने वाले कोड में एडफिव फ़ंक्शन स्थानीय बनाना भी कोई फर्क नहीं पड़ता है। – Stray

उत्तर

8

यह एक क्रियालेख/फ़्लैश प्लेयर बग है। ऐसा लगता है कि एडोब ने इसे आंतरिक रूप से तय किया है लेकिन फ्लैश प्लेयर 10.1 के रूप में फिक्स जारी नहीं किया गया है।

देखें: https://bugzilla.mozilla.org/show_bug.cgi?id=513095

जो यहां पाया हमारे बग की जड़ है:

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

बेस्ट बात अब आप के लिए क्या कर सकते हैं सरणी का उपयोग करते समय नक्शा

की जरूरत है साथ छड़ी है
+2

मेरे लिए यह खोजने के लिए धन्यवाद - कम से कम मैं पागल नहीं जा रहा हूं। – Stray

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

धन्यवाद - मैं प्रतीत होता है कि उपयोगी मानचित्र/फ़िल्टर इत्यादि के अधिक उपयोग करने की कोशिश कर रहा था - मैं आमतौर पर इन चीजों के लिए (var i ...) लूप का उपयोग करता हूं (प्रत्येक के लिए तेज़ से अधिक) तो मैं लंबे समय तक वापस जाऊंगा हाथ। मेरे लिए यह पुष्टि करने के लिए चीयर्स। – Stray

संबंधित मुद्दे