JavaScript 中比较字符串的最佳方法? [重复]

问题描述 投票:0回答:3

我正在尝试优化一个在 JavaScript 中对字符串进行二分搜索的函数。

二分查找要求您知道键是

==
主元还是
<
主元。

但这需要在 JavaScript 中进行两次字符串比较,这与

C
之类的语言不同,这些语言具有
strcmp()
函数,可返回三个值
(-1, 0, +1)
(小于、等于、大于)。

JavaScript 中是否有这样的原生函数,可以返回三进制值,以便在二分搜索的每次迭代中只需要一次比较?

javascript string optimization comparison binary-search
3个回答
688
投票

您可以使用

localeCompare()
方法。

string_a.localeCompare(string_b);

/* Expected Returns:

 0:  exact match

-1:  string_a < string_b
 
 1:  string_a > string_b

 */

进一步阅读:


82
投票

在 JavaScript 中,你可以检查两个字符串是否有与整数相同的值,这样你就可以这样做:

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

因此,您可以创建自己的函数,以与

strcmp()
相同的方式检查字符串。

所以这将是执行相同操作的函数:

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

15
投票

您可以使用比较运算符来比较字符串

strcmp
函数可以这样定义:

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

Edit    这是一个字符串比较函数,最多需要 min { length(a), length(b) } 比较来了解两个字符串如何相互关联:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.