الطريقة المثلى لمقارنة السلاسل في جافا سكريبت؟ [مكرر
-
24-09-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
- هل هناك javaScript strcmp ()؟ 5 إجابات
أحاول تحسين وظيفة تقوم بالبحث الثنائي عن الأوتار في JavaScript.
يتطلب منك البحث الثنائي معرفة ما إذا كان المفتاح ==
المحور أو <
المحور.
ولكن هذا يتطلب مقارنتين للسلسلة في JavaScript ، على عكس في C
مثل اللغات التي لديها strcmp()
الوظيفة التي تُرجع ثلاث قيم (-1, 0, +1)
ل (أقل من ، على قدم المساواة ، أكبر من).
هل هناك مثل هذه الوظيفة الأصلية في JavaScript ، والتي يمكن أن تعيد قيمة ثلاثية بحيث تكون هناك مقارنة واحدة فقط في كل تكرار للبحث الثنائي؟
المحلول
يمكنك استعمال ال localeCompare()
طريقة.
string_a.localeCompare(string_b);
/* Expected Returns:
0: exact match
-1: string_a < string_b
1: string_a > string_b
*/
قراءة متعمقة:
نصائح أخرى
حسنًا ، في JavaScript ، يمكنك التحقق من سلسلتين لقيم نفس الأعداد الصحيحة حتى تتمكن من القيام بذلك:
"A" < "B"
"A" == "B"
"A" > "B"
وبالتالي يمكنك عمل وظيفتك الخاصة التي تتحقق من الأوتار بنفس طريقة strcmp()
.
لذلك ستكون هذه هي الوظيفة التي تفعل الشيء نفسه:
function strcmp(a, b)
{
return (a<b?-1:(a>b?1:0));
}
تستطيع استخدم عوامل المقارنة لمقارنة السلاسل. أ strcmp
يمكن تعريف الوظيفة على هذا النحو:
function strcmp(a, b) {
if (a.toString() < b.toString()) return -1;
if (a.toString() > b.toString()) return 1;
return 0;
}
تعديلفيما يلي وظيفة مقارنة السلسلة التي تستغرق على الأكثر min {length (أ)، الطول(ب)} مقارنات لمعرفة كيف ترتبط سلسلتان ببعضهما البعض:
function strcmp(a, b) {
a = a.toString(), b = b.toString();
for (var i=0,n=Math.max(a.length, b.length); i<n && a.charAt(i) === b.charAt(i); ++i);
if (i === n) return 0;
return a.charAt(i) > b.charAt(i) ? -1 : 1;
}