在Javascript中比较string的最佳方法?

我正在尝试优化一个函数,在JavaScript中进行string的二进制search。

二进制search要求您知道密钥是否是数据透视表或数据透视表。

但是这需要在Javascript中进行两个string比较,而不像C语言那样, strcmp()函数为(小于,等于,大于)返回三个值(-1,0,+1)。

在JavaScript中是否有这样一个本地函数,它可以返回一个三元值,这样在二进制search的每次迭代中只需要一次比较就可以了?

你可以使用localeCompare()方法。

 string_a.localeCompare(string_b); /* Expected Returns: 0: exact match -1: string_a < string_b 1: string_a > string_b */ 

进一步阅读:

  • 堆栈溢出 – 是否有一个JavaScript strcmp()?
  • 教程点 – Javascript的string – localeCompare()方法

那么在JavaScript中,你可以检查两个string的值相同的整数,所以你可以做到这一点:

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

因此,您可以使自己的函数检查string的方式与strcmp()

所以这将是同样的function:

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

您可以使用比较运算符来比较string 。 一个strcmp函数可以这样定义:

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

编辑这里是一个string比较函数,它至多需要min {length( a ),length( b )}来比较两个string如何相互关联:

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