2012-05-17 22 views
54

मैं इस तरह एक सरणी है:क्रमबद्ध प्रत्येक तत्व की लंबाई के आधार पर एक सरणी

arr = [] 
arr[0] = "ab" 
arr[1] = "abcdefgh" 
arr[2] = "abcd" 

छँटाई के बाद, उत्पादन श्रृंखला होनी चाहिए:

arr[0] = "abcdefgh" 
arr[1] = "abcd" 
arr[2] = "ab" 

मेरा मतलब है, मैं में चाहते हैं प्रत्येक तत्व की लंबाई के अवरोही क्रम।

+0

[ 'sort'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort) सुंदर सीधे आगे, तुम कहाँ हो रही है है कठिनाई? –

+1

@muistooshort अच्छी तरह से डिफ़ॉल्ट सॉर्ट() तारों को वर्णानुक्रम से टाइप करता है, वह स्ट्रिंग। लम्बाई सॉर्टिंग की तलाश में था जैसा कि चयनित उत्तर में देखा जा सकता है :) –

उत्तर

136

आप सरणी को सॉर्ट करने के लिए Array.sort विधि का उपयोग कर सकते हैं। एक सॉर्टिंग समारोह है कि छँटाई मापदंड के रूप में स्ट्रिंग की लंबाई पर विचार करता है इस प्रकार के रूप में इस्तेमाल किया जा सकता है:

arr.sort(function(a, b){ 
    // ASC -> a.length - b.length 
    // DESC -> b.length - a.length 
    return b.length - a.length; 
}); 

नोट: स्ट्रिंग की लंबाई से ["a", "b", "c"] छँटाई ["a", "b", "c"] वापस जाने के लिए गारंटी नहीं है। the specs के अनुसार:

तरह जरूरी स्थिर नहीं है (अर्थात, तत्वों की तुलना कि बराबर जरूरी उनके मूल क्रम में नहीं रहते हैं) है।

उद्देश्य शब्दकोश आदेश से तो लंबाई से सॉर्ट करने के लिए आप अतिरिक्त मापदंड निर्दिष्ट करना होगा है:

["c", "a", "b"].sort(function(a, b) { 
    return a.length - b.length || // sort by length, if equal then 
     a.localeCompare(b); // sort by dictionary order 
}); 
+6

बहुत बढ़िया! मिठाई! हाँ! – Squirrl

+0

मैं जोड़ता हूं कि यह वस्तुओं की लंबाई घटाने से सरणी को प्रकार देता है। – davidhq

+0

आह यह टिप्पणी में है :) इसे पहले – davidhq

2

यहाँ, प्रकार है जावास्क्रिप्ट के साथ एक स्ट्रिंग की लंबाई पर निर्भर करता है के रूप में आप से पूछा:

[बुलबुला तरह से समस्या का समाधान] [1]

[1]: http://jsfiddle.net/sssonline2/vcme3/2/enter code here

-2
<script> 
     arr = [] 
     arr[0] = "ab" 
     arr[1] = "abcdefgh" 
     arr[2] = "sdfds" 
     arr.sort(function(a,b){ 
      return a.length<b.length 
     }) 
     document.write(arr) 

</script> 

गुमनाम फ़ंक्शन जिसे आप सॉर्ट करते हैं उसे बताता है कि दिए गए सरणी को कैसे सॉर्ट करना है। यह मदद करता है। मुझे पता है कि यह भ्रमित है लेकिन आप इसे हल करके सरणी के तत्वों को सॉर्ट करने के तरीके को कैसे बता सकते हैं एक पैरामीटर यह बता

+3

सॉर्टिंग तुलना फ़ंक्शन वापस लौटने वाला क्या है? यहां एक संकेत है: यह एक बुलियन नहीं है। –

0

करने के लिए सलमान के जवाब के आधार पर के रूप में कार्य, मैं इसे संक्षेप करने के लिए एक छोटे से समारोह में लिखा है:

function sortArrayByLength(arr, ascYN) { 
     arr.sort(function (a, b) {   // sort array by length of text 
      if (ascYN) return a.length - b.length;    // ASC -> a - b 
      else return b.length - a.length;     // DESC -> b - a 
     }); 
    } 

तो बस यह

sortArrayByLength(myArray, true); 
साथ फोन

ध्यान दें कि दुर्भाग्यवश, this page पर बताए गए कार्यों को ऐरे प्रोटोटाइप में जोड़ा/नहीं जोड़ा जाना चाहिए।

इसके अलावा, यह पैरामीटर के रूप में पारित सरणी को संशोधित करता है और कुछ भी वापस नहीं करता है। यह सरणी के दोहराव को मजबूर करेगा और बड़े सरणी के लिए अच्छा नहीं होगा। अगर किसी के पास एक बेहतर विचार है, तो कृपया टिप्पणी करें!

0

मैंने इसे संक्षिप्त बनाने के लिए @ शारीफ के उत्तर को अनुकूलित किया। मैं का उपयोग करें,

.sort(function(arg1, arg2) { return arg1.length - arg2.length })

+0

यह कम लंबाई से उच्च लंबाई तक सॉर्ट होगा – Miguel

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