开发者

Optimum way to compare strings in JavaScript? [duplicate]

开发者 https://www.devze.com 2022-12-18 08:41 出处:网络
This question already has answers here: Is there a JavaScript strcmp()? (7 answers) Closed 9 years ago. I am trying to optimize a function which does binary search of strings in JavaScrip
This question already has answers here: Is there a JavaScript strcmp()? (7 answers) Closed 9 years ago.

I am trying to optimize a function which does binary search of strings in JavaScript.

Binary search requires you to know whether the key is == the pivot or < the pivot.

But this requires two string comparisons in JavaScript, unlike in C like languages which have the strcmp() function that returns three values (-1, 0, +1) for (less开发者_如何学编程 than, equal, greater than).

Is there such a native function in JavaScript, that can return a ternary value so that just one comparison is required in each iteration of the binary search?


You can use the localeCompare() method.

string_a.localeCompare(string_b);

/* Expected Returns:

 0:  exact match

-1:  string_a < string_b

 1:  string_a > string_b

 */

Further Reading:

  • MDN: String.prototype.localeCompare
  • Stack Overflow - Is there a JavaScript strcmp()?
  • Tutorials Point: JavaScript String - localeCompare() Method


Well in JavaScript you can check two strings for values same as integers so yo can do this:

  • "A" < "B"
  • "A" == "B"
  • "A" > "B"

And therefore you can make your own function that checks strings the same way as the strcmp().

So this would be the function that does the same:

function strcmp(a, b)
{   
    return (a<b?-1:(a>b?1:0));  
}


You can use the comparison operators to compare strings. A strcmp function could be defined like this:

function strcmp(a, b) {
    if (a.toString() < b.toString()) return -1;
    if (a.toString() > b.toString()) return 1;
    return 0;
}

Edit    Here’s a string comparison function that takes at most min { length(a), length(b) } comparisons to tell how two strings relate to each other:

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;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消