JavaScript 有 strcmp() 吗?
有人可以帮我验证一下吗? JavaScript 没有 strcmp() 版本,因此您必须写出如下内容:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
Can anyone verify this for me? JavaScript does not have a version of strcmp(), so you have to write out something like:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
正如你所指出的,Javascript 没有它。
快速搜索得出:
来自 http://kevin.vanzonneveld.net/techblog/article/ javascript_equivalent_for_phps_strcmp/
当然,如果需要,您可以只添加 localeCompare:
并在任何地方使用
str1.localeCompare(str2)
,而不必担心本地浏览器是否已附带它。 唯一的问题是您必须添加对区域设置
和选项
(如果您关心的话)。Javascript doesn't have it, as you point out.
A quick search came up with:
from http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strcmp/
Of course, you could just add localeCompare if needed:
And use
str1.localeCompare(str2)
everywhere, without having to worry wether the local browser has shipped with it. The only problem is that you would have to add support forlocales
andoptions
if you care about that.localeCompare()
很慢,所以如果你不关心“正确”的顺序对于非英文字符串,请尝试原始方法或看起来更简洁的方法:这比我的机器上的
localeCompare()
快一个数量级。+
确保答案始终是数字而不是布尔值。localeCompare()
is slow, so if you don't care about the "correct" ordering of non-English-character strings, try your original method or the cleaner-looking:This is an order of magnitude faster than
localeCompare()
on my machine.The
+
ensures that the answer is always numeric rather than boolean.用法:
strcmp(string1, string2)
结果:
1
表示 string1 更大,0
表示相等,-1
意味着 string2 更大。这比
String.prototype.localeCompare
具有更高的性能,而且
numeric:true
使其可以进行逻辑数字比较Usage:
strcmp(string1, string2)
Result:
1
means string1 is bigger,0
means equal,-1
means string2 is bigger.This has higher performance than
String.prototype.localeCompare
Also,
numeric:true
makes it do logical number comparison来自这篇如何在 JavaScript 中检查两个字符串是否相等文章:
===
运算符来检查它们是否相等。e + ◌́ = é
)时,您首先要对它们进行规范化,然后再比较相等性,如下所示 -s1.normalize() === s2.normalize()
from this How to Check if Two Strings are Equal in JavaScript article:
===
operator to check if they are equal.e + ◌́ = é
), you normalize them first before comparing for equality as follows-s1.normalize() === s2.normalize()
所以我陷入了这个兔子洞并编写了一些测试来建立直觉,结果很奇怪。
tldr 看起来像 localeCompare 执行小写
相等运算符则不然。 这会导致“ff”>=“ZZ”,但区域设置比较返回-1,因为“ff”<=“zz”
为了获得最佳结果,请在浏览器控制台中查看代码日志ctrl + shift + i
第二个片段,它会隐藏手动测试所以你会看到一些随机的。
主页这对某人有帮助
So I fell into this rabbit hole and wrote some tests to build an intuition, the result's are weird.
tldr it looks like localeCompare Performs a to lowercase that
the equality operators do not. This causes "ff" to be >= "ZZ" but locale Compare returns -1 becuse "ff" <= 'zz'
For best results view logs of code in browser console ctrl + shift + i
second snip it hides hand tests so you see some random ones.
Home this helps someone
在我的测试中,这比对同一组随机选择的单词使用一对三元语句快大约 10%。
In my tests, this is about 10% faster than using a pair of ternary statements on the same set of randomly selected words.
怎么样:
然后,将 s1 与 2 进行比较:
How about:
Then, to compare s1 with 2:
关于什么
What about