2016-07-26 18 views
0

Ich möchte eine Groß- und Kleinschreibung Vergleich zwischen 2 String implementieren. Hier ist, was ich bisher getan haben, ist es nicht so gutJavascript vergleichen Strings Fall sensative

function compare(x,y){ 
    for (var i = 0; i < Math.min(x.length, y.length); i++){ 
    var xc = x[i]; 
    var yc = y[i]; 
    if (xc == yc) 
    continue; 
    var xclow = x.toLowerCase(); 
    var yclow = y.toLowerCase(); 
    if (xclow == yclow) 
     return xc < yc ? -1 : 1 
    else 
     return xclow < yclow ? -1 : 1; 

} 

}

wenn im console.log(compare("Kk","kk")); tun arbeitet Ich erhalte -1 wie erwartet, aber wenn ich console.log(compare("Kka","kk")); mache ich bin bekommen 1 und ich weiß nicht warum.

+0

Komprimierung? Vergleich? – Bergi

+1

WTH machst du 'toLowerCase', wenn du willst, dass es case * sensitive * ist? – Bergi

+0

Vergleich natürlich, sorry a falschpell – styx

Antwort

1

Es gab zwei Tippfehler, Sie x.toLowerCase(); statt xc.toLowerCase(); geschrieben hatte und y.toLowerCase(); anstelle von yc.toLowerCase();

function compare(x, y) { 
    for (var i = 0; i < Math.min(x.length, y.length); i++) { 
     var xc = x[i]; 
     var yc = y[i]; 
     if (xc == yc) 
      continue; 
     var xclow = xc.toLowerCase(); 
     var yclow = yc.toLowerCase(); 
     if (xclow == yclow) 
      return xc < yc ? -1 : 1 
     else 
      return xclow < yclow ? -1 : 1; 
     return x.length.localeCompare(y.length); 
    } 
} 

Übrigens ist die letzte return-Anweisung unnötig, da sowohl if als auch sonst return-Anweisungen enthalten.

Es gibt einfachere Möglichkeiten, das zu tun, aber ich denke, dass Sie versuchen, das auf eigene Faust zu erreichen.

+0

Danke, aber immer noch der Rückgabewert ist immer noch falsch – styx

+0

@styx: 'compare (" Kka "," kk ")' ergibt '-1' wie erwartet jetzt. Was ist los mit dir? – Bergi

+0

@Bergi, aus irgendeinem Grund habe ich nicht gearbeitet, jetzt funktioniert gut, danke – styx

3

Warum nicht einfach "Kk" === "kk" verwenden?

function compare(x, y) { 
    return x === y; 
    // or return x === y ? 1 : -1 
} 
+1

Ihre Antwort ist richtig, wissen Sie nicht, wer Sie downwarded –

+0

OP scheint nicht zu möchte auf Gleichheit testen, aber schreiben Sie stattdessen eine [Vergleichsfunktion] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description) – Bergi