![](/img/trans.png)
[英]Dart compareTo() sometimes returns different result than javascript localeCompare()
[英]JavaScript localeCompare() returns different result than Java compareTo()
我想要實現的是同步這兩個函數的結果。 這些方法返回數字,指示引用字符串在排序順序中是在給定字符串之前還是之后,或者與給定字符串相同。
JavaScript localeCompare 有許多參數需要設置,但我嘗試過的沒有任何效果。
**Java returns**: **JavaScript returns**:
Sensor Sensor
SensorDus Sensor DUS
SensorEnv Sensor E
Sensor DUS SensorDUS
Sensor E Sensor Env
看起來這兩種方法的區別在於它們返回數字的方式。 如果參考字符串出現在比較字符串之前,則為負數; 如果參考字符串出現在比較字符串之后,則為正; 如果它們相等,則為 0。
如果這是可能的,有什么想法嗎?
我對問題的解決方案。 我沒有使用 localeCompare(),而是將 Java compareTo() 重寫為 JavaScript 方法。 java 方法返回正數(更高)的空格,而不是 JavaScript 中沒有空格的字符串。
localCompareAsInJava: function(t1,t2)
{
var len1 = t1.length;
var len2 = t2.length;
var lim = Math.min(t1.length, t2.length);
var v1 = t1;
var v2 = t2;
var k = 0;
while(k < lim)
{
var c1 = v1[k];
var c2 = v2[k];
if(c1 != c2)
{
if(c1.charCodeAt(0) == 32 )
{
var charWithSpace = c1.charCodeAt(0) + c2.charCodeAt(0);
return charWithSpace;
}
else{
return c1.charCodeAt(0) - c2.charCodeAt(0);
}
}
k++;
}
return len1 - len2;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.