Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript localeCompare() returns different result than Java compareTo()

What I am trying to achieve is to synchronize the outcome of these two functions. These methods return number indicating whether a reference string comes before or after or is the same as the given string in sort order.

The JavaScript localeCompare has many parameters to be set but nothing from what I have tried worked.

**Java returns**:      **JavaScript returns**:
Sensor             Sensor
SensorDus          Sensor DUS
SensorEnv          Sensor E
Sensor DUS         SensorDUS
Sensor E           Sensor Env

It looks like that the difference it those two methods is how they return the numbers. A negative number if the reference string occurs before the compare string; positive if the reference string occurs after the compare string; 0 if they are equivalent.

Any ideas if this is somehow possible?

like image 431
Roman Avatar asked Apr 15 '26 17:04

Roman


1 Answers

My solution to the problem. Instead of using localeCompare() I rewrote the Java compareTo() into JavaScript method. The java method returned positive (higher) number for white space as opposed to string without a white space in 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;
}
like image 130
Roman Avatar answered Apr 17 '26 06:04

Roman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!