2012-10-18 11 views
10

जावास्क्रिप्ट में Math.max या Math.min फ़ंक्शन के मानों को पार करते समय क्रमशः इनपुट से उच्चतम और निम्नतम मान लौटाते हैं।Math.max और Math.min NaN अपरिभाषित प्रविष्टि

हालांकि, अगर अपरिभाषित डेटा का एक टुकड़ा दर्ज किया गया है, उदा।

Math.max(5,10,undefined); 

परिणाम लौटाया गया NaN है। क्या जेएस/jQuery का उपयोग करके इसे ठीक करने का कोई आसान तरीका है?

+0

आप की जाँच के लिए अपने स्वयं के आवरण समारोह लिख सकते हैं या बस इसे अपने आप को लागू करते हैं। –

उत्तर

17

मुझे लगता है कि undefined वास्तव में कुछ चर है।

आप किसी संख्या को सुनिश्चित करने के लिए NaN मान के लिए -Infinity को प्रतिस्थापित कर सकते हैं।

var foo; 

Math.max(5, 10, isNaN(foo) ? -Infinity : foo); // 10 

एक ही अवधारणा Math.min पर इस्तेमाल किया जा सकता है, लेकिन Infinity साथ:

var foo; 

Math.min(5, 10, isNaN(foo) ? Infinity : foo); // 10 
+0

अच्छा जवाब! Math.min कार्यान्वयन को भी शामिल करने में कोई दिक्कत नहीं होगी। – cbayram

+0

@cbayram: अच्छा विचार। मैं अपडेट करूंगा। –

+1

'isNaN (foo) 'के बजाय आप' foo == foo' का उपयोग कर सकते हैं जो तेज़ है ([स्रोत] (http://jsperf.com/nan-check))। – Florent

9

लिखें अपनी खुद की max समारोह:

function max() { 
    var par = [] 
    for (var i = 0; i < arguments.length; i++) { 
     if (!isNaN(arguments[i])) { 
      par.push(arguments[i]); 
     } 
    } 
    return Math.max.apply(Math, par); 
} 

या कम array filtering का उपयोग कर:

function max() { 
    var args = Array.prototype.slice.call(arguments); 
    return Math.max.apply(Math, args.filter(function(val) { 
     return !isNaN(val); 
    })); 
} 

उपयोग:

max(5, 10, undefined); // output: 10 
+2

बढ़िया है, लेकिन 'isNaN' का उपयोग करना बेहतर नहीं होगा? दुर्भाग्य से –

+0

'तर्क' वास्तविक सरणी नहीं है। – Yoshi

+0

@ योशी सच। मैं यही भूल गया। धन्यवाद! – VisioN

1

चेक कि प्रत्येक संख्या यह max को पार करने से पहले परिभाषित किया गया है। एक सेंटीनेल मान को डिफ़ॉल्ट के रूप में उपयोग करें (जैसे -Infinity)। मिनट के लिए आप Infinity का उपयोग करना चाहते हैं:

var a = 5; 
var b = 10; 
var c = undefined; 

var defaultForMax = function (num) { 
    return typeof num === 'number' ? num : -Infinity; 
}; 

c = defaultForMax(c); // c is now -Infinity 

Math.max(a, b, c); // 10 

http://jsfiddle.net/QTckE/

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