我正在尝试优化在JavaScript中对字符串进行二进制搜索的函数。
二进制搜索要求您知道密钥是==
枢轴还是<
枢轴。
但这需要在JavaScript中进行两次字符串比较,这与C
类似的语言不同,strcmp()
函数返回三个值(-1, 0, +1)
(小于,等于,大于)。
JavaScript中是否存在这样的本机函数,它可以返回三元值,以便在二进制搜索的每次迭代中只需要进行一次比较?
答案 0 :(得分:485)
您可以使用localeCompare()
方法。
string_a.localeCompare(string_b);
/* Expected Returns:
0: exact match
-1: string_a < string_b
1: string_a > string_b
*/
进一步阅读:
答案 1 :(得分:53)
在JavaScript中你可以检查两个字符串的值与整数相同,所以你可以这样做:
"A" < "B"
"A" == "B"
"A" > "B"
因此,您可以创建自己的函数,以与strcmp()
相同的方式检查字符串。
所以这就是执行相同功能的功能:
function strcmp(a, b)
{
return (a<b?-1:(a>b?1:0));
}
答案 2 :(得分:13)
你可以use the comparison operators to compare strings。可以像这样定义strcmp
函数:
function strcmp(a, b) {
if (a.toString() < b.toString()) return -1;
if (a.toString() > b.toString()) return 1;
return 0;
}
编辑这是一个字符串比较函数,最多需要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;
}