2011-01-24 12 views
7

Array.prototype.sort कैसे एक सरणी में अपरिभाषित मान संभालता है?जावास्क्रिप्ट array.sort अपरिभाषित मानों के साथ

var array = [1,undefined,2,undefined,3,undefined,4]; 
var array2 = []; 
array2[0] = 1;array2[2] = 2;array2[4] = 3;array2[6] = 4; 

जब बुला array.sort(function(l,r) { ... }); मूल्यों undefined कभी नहीं l या r के रूप में पारित कर रहे हैं।

क्या मैं गारंटी दे सकता हूं कि सभी अपरिभाषित मान हमेशा सभी ब्राउज़रों के लिए सरणी के अंत में जाएंगे?

निम्नलिखित पाश एक सरणी

array.sort(); 
for (var i = 0; array[i] !== undefined; i++) { 
    // handle array 
} 

आप मान सकते हैं कि कोई घोषित undefined एक चर के रूप में सभी गैर undefined डेटा को संभाल सकते हैं।

+2

आईई में <= 8 बुला हटाता है, वे पूरी तरह से सरणी से निकाल दिया जाएगा। देखें: https://github.com/documentcloud/underscore/issues/484#issuecomment-4055242 – Gijs

उत्तर

7

हां, आप सुरक्षित रूप से undefined को सरणी के अंत में स्थानांतरित कर सकते हैं।

MDC से:

जावास्क्रिप्ट 1.2 में, इस पद्धति नहीं रह गया है अपरिभाषित तत्वों अशक्त में धर्मान्तरित; बजाय यह उनके सरणी

के उच्च अंत spec, 15.4.4.11 से सॉर्ट करता:

क्योंकि न के बराबर संपत्ति मूल्यों हमेशा अपरिभाषित संपत्ति मूल्यों से अधिक की तुलना करें और अपरिभाषित हमेशा किसी भी अन्य की तुलना में अधिक से अधिक तुलना मूल्य, अपरिभाषित संपत्ति मूल्य हमेशा परिणाम के अंत तक क्रमबद्ध होते हैं, इसके बाद मौजूद गैर-मौजूद संपत्ति मान होते हैं।

+0

धन्यवाद। उनके लिए यह अस्तित्व में नहीं है कि वहां केवल "अंतराल" न हो, जिसमें सरणी में अपरिभाषित मान शामिल हैं। कृपया spec के लिंक पर किसी प्रकार का सेक्शन या पेज नंबर जोड़ें। – Raynos

0

सभी अपरिभाषित मूल्य घोषणा में उनके आदेश के बावजूद सरणी के अंत में जाएंगे। (कम से कम यह क्रोम के जेएस इंजन में कैसे काम करता है)

0

ऐसा प्रतीत होता है कि अपरिभाषित मान सूची के नीचे गिर जाएंगे। आपको यह दिखाने के लिए कुछ नमूना कोड यहां दिया गया है:

var a = [1,undefined,2,undefined,3,undefined,4]; 
    a = a.sort(); 
    for(i = 0 ; i < a.length ; i++) 
    { 
    alert(a[i]); 
    } 

यह निश्चित रूप से जावास्क्रिप्ट का डिफ़ॉल्ट व्यवहार है। यदि आप डिफ़ॉल्ट व्यवहार को ओवरराइट करते हैं तो केवल आपको पता चलेगा।

-3

सफारी सिर्फ undefined संपत्ति जब sort(); विधि

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