क्रमबद्ध उद्देश्यों के लिए वर्णमाला के 2 तारों की तुलना करना


105

मैं क्रमबद्ध उद्देश्यों के लिए वर्णमाला के 2 तारों की तुलना करने की कोशिश कर रहा हूं। उदाहरण के लिए, मैं एक बूलियन जांच करना चाहता हूं if('aaaa' < 'ab')। मैंने इसकी कोशिश की, लेकिन यह मुझे सही परिणाम नहीं दे रहा है, इसलिए मुझे लगता है कि यह सही वाक्यविन्यास नहीं है। मैं इसे jquery या जावास्क्रिप्ट में कैसे करूँ?


2
क्या आपने stackoverflow.com/questions/1134976/… देखा है ?
j08691

ऐसे आप इसको करते हैं। आप किस परिणाम की उम्मीद करते हैं? अभिव्यक्ति 'aaaa' < 'ab'लौटती है true। <! - वोट हटाने के लिए गलत संपादन ->
गुफ़ा

जवाबों:


122

कुछ परीक्षण मामलों को देखने दें - अपने JS कंसोल में निम्न अभिव्यक्तियाँ चलाने का प्रयास करें:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

सभी सच लौटे।

जावास्क्रिप्ट चरित्र द्वारा तार चरित्र की तुलना करता है और "वर्णमाला में" बी "से पहले आता है - इसलिए इससे कम है।

आपके मामले में यह ऐसा काम करता है -

१। " एक aaa" < " एक ख"

पहले दो "a" वर्णों की तुलना करता है - सभी समान, अगले वर्ण पर जाने की अनुमति देता है।

२। "एक एक आ" < "एक "

दूसरे अक्षर "a" के खिलाफ "b" की तुलना करता है - हूप! "ए" "बी" से पहले आता है। सच लौटाता है।


2
Š, č,, š
,,,

4
प्रभावशाली है कि यह देशी में बनाया गया है!
स्लाव कनीज़ेव

11
कुछ बातों को ध्यान में रखना राजधानियों होगा। "a" < "b" === true "a" < "B" === false
टेड वैन रिएल

141

आप कहते हैं कि तुलना छँटाई प्रयोजनों के लिए है। तब मैं इसके बजाय सुझाव देता हूं:

"a".localeCompare("b");

इसके -1बाद से "a" < "b", 1या 0अन्यथा, आपको Array.prototyp.sort () की आवश्यकता है

ध्यान रखें कि छंटाई स्थानीय निर्भर है। जैसे जर्मन में, äका एक प्रकार है a, इसलिए "ä".localeCompare("b", "de-DE")रिटर्न -1। स्वीडिश äमें, वर्णमाला के अंतिम अक्षरों में से एक है, इसलिए "ä".localeCompare("b", "se-SE")रिटर्न करता है 1

दूसरे पैरामीटर के बिना localeCompare, ब्राउज़र के लोकेल का उपयोग किया जाता है। मेरे अनुभव में ऐसा कभी नहीं है कि मैं क्या चाहता हूं, क्योंकि तब यह सर्वर की तुलना में अलग तरह से होगा, जिसमें सभी उपयोगकर्ताओं के लिए एक निश्चित स्थान है।


6
+1 यह भी ध्यान देने योग्य है कि यह मामलों के लिए भी ठीक है ( "aa".localeCompare("ab")== "आ" ".localeCompare (" Ab ") किसी भी स्थान के लिए मैं सोच सकता हूं) और IE के पुराने संस्करणों में भी काम करता है। स्वीकृत उत्तर होना चाहिए!
user56reinstatemonica8

1
पीटर के लिए +1; यह कैसे जावास्क्रिप्ट सरणी छँटाई काम करता है के साथ और अधिक संगत है इसलिए यह अधिक उपयोगी है, और मुझे लगता है कि यह ओपी के लिए क्या पूछ रहा था।
ग्रांडक्लॉसिंग

मुझे लगता है, यह सही जवाब होना चाहिए। तुलनात्मक रूप से तार ( यूनिकोड नहीं ) बनाने का एकमात्र तरीका है ।
लिम्बो

यह वास्तव में चालबाजी के लिए लग रहा था, यहां तक ​​कि अल्फ़ान्यूमेरिक मूल्यों के लिए भी। धन्यवाद।
जोशुआ पिंटर

30

बस याद रखें कि "x"> "X" जैसी स्ट्रिंग तुलना केस-संवेदी है

"aa" < "ab" //true
"aa" < "Ab" //false

आप .toLowerCase()मामले की संवेदनशीलता के बिना तुलना करने के लिए उपयोग कर सकते हैं।


8

"a".localeCompare("b")वास्तव में लौटना चाहिए -1के बाद से aपहले प्रकारb

http://www.w3schools.com/jsref/jsref_localecompare.asp


1
यदि आप मेरे जवाब के लिए एक टिप्पणी के रूप में इसका मतलब है, तुम सही हो। मेरा उत्तर गलत तरीके से परिणाम को 1 के रूप में दिखाता है, इसलिए मैंने इसे सही किया।
पीटर वी। मॉर्क

3

आओ हम कहते हैं कि हमारे पास वस्तुओं की एक सरणी है:

{ name : String }

फिर हम अपने एरे को इस प्रकार सॉर्ट कर सकते हैं:

array.sort(function(a, b) {
    var orderBool = a.name > b.name;
    return orderBool ? 1 : -1;
});

नोट: ऊपरी अक्षरों के लिए सावधान रहें, आपको अपने उद्देश्य के कारण अपने स्ट्रिंग को निचले मामले में डालने की आवश्यकता हो सकती है।


सॉर्टिंग के लिए उपयोग किए जाने वाले फ़ंक्शन को 0 वापस करने के लिए माना जाता है यदि वे समान हैं। यह फ़ंक्शन केवल -1 या 1. देता है
स्टीव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.