2013-05-18 4 views
5

ऐसा क्यों हो रहा है?parseInt misbehaves जब मैप कॉल पर तर्क के रूप में पारित किया गया

var numbers = [ '1', '2', '3', '4' ]; 
var intNumbers = numbers.map(parseInt); // intNumbers = [1, NaN, NaN, NaN] 
var fltNumbers = numbers.map(parseFloat); // fltNumbers = [1, 2, 3, 4, 5 ] 

लेकिन Array.prototype.map.call(numbers, parseInt); रिटर्न [ 1, 2, 3, 4];। मैं इस कोड को Google क्रोम 26.0.1410.65 में चला रहा हूं।

+6

पर https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map –

+0

भी उन्हें आसानी से ठीक समझाया (i)}) ' – Jonah

+0

इसके अलावा, * हमेशा * रेडिक्स पैरामीटर को 'parseInt()' पर पास न करें और इसे 10 10 पर सेट करें, यदि आप बेस 10 का उपयोग कर रहे हैं, क्योंकि अन्यथा, आप शायद बाद में मुद्दों को डीबग करने के लिए अजीब और बहुत मुश्किल से सामना करना पड़ता है। – rid

उत्तर

4

उचित जवाब के लिए लिंक टिप्पणी में दिया जाता है, लेकिन मैं इसे यहाँ पोस्ट करना चाहते हैं:

["1", "2", "3"].map(parseInt); 

एक उम्मीद कर सकता है जबकि [1, 2, 3]

वास्तविक परिणाम [1, NaN, NaN]

है parseInt अक्सर एक तर्क के साथ प्रयोग किया जाता है, लेकिन दो लेता है। दूसरा कॉलबैक फ़ंक्शन करने के लिए मूलांक जा रहा है, Array.prototype.map 3 तर्क गुजरता है: तत्व, सूचकांक, सरणी

तीसरा तर्क parseInt द्वारा नजरअंदाज कर दिया जाता है, लेकिन नहीं एक दूसरे, इसलिए संभावित भ्रम।

त्वरित सुधार

function returnInt(element){ 
    return parseInt(element,10); 
} 


["1", "2", "3"].map(returnInt); 

वास्तविक परिणाम (उम्मीद के रूप में) संख्या की एक सरणी है

0

https://developer.mozilla.org/en-GB/docs/JavaScript/Reference/Global_Objects/Array/map बताते हैं कि कैसे नक्शा काम करता है।

मुझे लगता है यह समाधान है कि योना का प्रस्ताव रखा, बात आप के बजाय यह घालना के मैप करना चाहते हैं के लिए एक लौटने समारोह बनाने ..

intN = numbers.map(function(i) { return parseInt(i) }); 

असली कारण है कि आप एक समारोह को खिलाने के लिए कोशिश कर रहे हैं के साथ आसान मानचित्र करने के लिए, लेकिन जेएस को फ़ंक्शन ठीक से नहीं मिल रहा है।

आप बेहतर पहले फ़ंक्शन घोषित करते हैं और फिर इसे खिलाते हैं। `Numbers.map (समारोह (i) {parseInt वापसी:

var titi = function(i) { return parseInt(i); }; 

var intN2 = numbers.map(titi); 
+1

फ़ंक्शन को पहले से घोषित करने की आवश्यकता नहीं है। आपको केवल 'parseInt' का उपयोग नहीं करना चाहिए। –

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

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