বাছাইয়ের উদ্দেশ্যে 2 টি স্ট্রিং বর্ণমালা অনুসারে তুলনা করা


105

আমি বাছাই করার উদ্দেশ্যে 2 টি স্ট্রিং বর্ণমালিকভাবে তুলনা করার চেষ্টা করছি উদাহরণস্বরূপ আমি বুলেটিয়ান চেক চাই if('aaaa' < 'ab')। আমি চেষ্টা করেছিলাম, তবে এটি আমাকে সঠিক ফলাফল দিচ্ছে না, তাই আমি অনুমান করি যে এটি সঠিক বাক্য গঠন নয়। আমি কীভাবে jquery বা জাভাস্ক্রিপ্টে এটি করব?



এইভাবে আপনি এটি করেন। আপনি কি ফলাফল আশা করেন? এক্সপ্রেশন 'aaaa' < 'ab'ফিরে আসে true। <! - ভোট অপসারণের জন্য মিথ্যা সম্পাদনা ->
গুফা

উত্তর:


122

কিছু পরীক্ষার কেস দেখতে দিন - আপনার জেএস কনসোলে নিম্নলিখিত এক্সপ্রেশনগুলি চালানোর চেষ্টা করুন:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

সমস্ত সত্য সত্য।

জাভাস্ক্রিপ্ট বর্ণের সাথে স্ট্রিং চরিত্রের তুলনা করে এবং "a" বর্ণমালায় "b" এর আগে আসে - সুতরাং এর চেয়ে কম হয়।

আপনার ক্ষেত্রে এটি যেমন কাজ করে -

ঘ। " একটি AAA" < " একটি B"

প্রথম দুটি "একটি" অক্ষর তুলনা করে - সমস্ত সমান, পরবর্তী অক্ষরে স্থানান্তরিত করতে দিন।

ঘ। "একটি একটি এএ" < "একটি "

দ্বিতীয় অক্ষরকে "এ" "বি" এর বিপরীতে তুলনা করে - হুপ! "এ" "খ" এর আগে আসে। সত্য ফিরে আসে।


2
যেমন সি, সি, এস, এস, Z, Z যেমন বিশেষ অক্ষর সম্পর্কে আলোচনার জন্য দেখুন stackoverflow.com/questions/6909126/...
dsdsdsdsd

4
চিত্তাকর্ষক যে এটি অন্তর্নির্মিত স্থানীয়ভাবে!
স্লাভা কন্যাজেভ

11
কিছু মনে রাখবেন রাজধানী হবে। "a" < "b" === true "a" < "B" === false
টেড ভ্যান রিয়েল

141

আপনি বলছেন যে তুলনাটি বাছাইয়ের উদ্দেশ্যে। তারপরে আমি এর পরিবর্তে প্রস্তাব দিই:

"a".localeCompare("b");

এটা তোলে ফেরৎ -1যেহেতু "a" < "b", 1বা 0অন্যথায়, মত তোমার জন্য প্রয়োজন (Array.prototype.sort)

মনে রাখবেন যে বাছাই করা লোকাল নির্ভর। জার্মান ভাষায় উদাহরণস্বরূপ, äএর একটি বৈকল্পিক a, তাই "ä".localeCompare("b", "de-DE")ফিরে আসে -1। সুইডিশ ভাষায় äবর্ণমালার শেষ বর্ণগুলির মধ্যে একটি, তাই "ä".localeCompare("b", "se-SE")ফিরে আসে 1

দ্বিতীয় প্যারামিটার ছাড়া localeCompare, ব্রাউজারের লোকেল ব্যবহার করা হয়। আমার অভিজ্ঞতার মধ্যে যা যা আমি চাই তা কখনই হয় না, কারণ এটি তখন সার্ভারের চেয়ে আলাদাভাবে সাজবে, যা সমস্ত ব্যবহারকারীর জন্য একটি নির্দিষ্ট লোকেল রয়েছে।


6
+1 এছাড়াও এটি উল্লেখযোগ্য যে "aa".localeCompare("ab")কেসগুলির জন্য এটিও জরিমানা ( == "আা"। উত্তর গ্রহণ করা উচিত!
user56reinstatemonica8

1
পিটারের জন্য +1; এটি জাভাস্ক্রিপ্ট অ্যারে বাছাই করা যেভাবে যাইহোক কীভাবে কাজ করে তার সাথে এটি আরও উপযুক্ত and
গ্র্যান্ডক্লোজিং

আমি মনে করি, এটি সঠিক উত্তর হওয়া উচিত। বর্ণমালার ( ইউনিকোড নয় ) স্ট্রিংগুলির তুলনা করার একমাত্র উপায় ।
লিম্বো

এমনকি এটি বর্ণমালার মানগুলির জন্যও সত্যই কৌতুকটি করেছে বলে মনে হয়েছিল। ধন্যবাদ।
জোশুয়া পিন্টার

30

কেবল মনে রাখবেন যে "x"> "এক্স" এর মতো স্ট্রিং তুলনাটি কেস-সংবেদনশীল

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

আপনি .toLowerCase()কেস সংবেদনশীলতা ছাড়াই তুলনা করতে ব্যবহার করতে পারেন ।


8

"a".localeCompare("b")আসলে আগে আগে -1থেকে ফিরে আসা উচিতab

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 প্রদান করে
স্টিভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.