2016-07-26 28 views
0

2文字列の大文字と小文字を区別して比較したいと思います。 はここでそれがとてもうまく機能していない、私がこれまで行ってきたものだjavascriptは文字列の大文字と小文字を区別する

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; 

} 

}

私は私がconsole.log(compare("Kka","kk"));をやっている場合イムしかし、私は取得しています-1期待通りconsole.log(compare("Kk","kk"));をやっている場合1を得て、私は理由を知らない。

+0

圧縮?比較? – Bergi

+1

WTHでは大文字と小文字を区別したい場合は 'toLowerCase'をやっていますか? – Bergi

+0

もちろん、誤ってスペルミス – styx

答えて

1

をロケールを追加することができます

console.log('a'.localeCompare('A', { sensitivity: 'variant' })); 

、あなたはx.toLowerCase();代わりのxc.toLowerCase();y.toLowerCase();を書いていました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); 
    } 
} 

ところで、ifとelseの両方にreturn文が含まれているため、最後のreturn文は不要です。

もっと簡単な方法がありますが、自分でそれを達成しようとしていると思います。

+0

ありがとう返り値はまだ間違っています – styx

+0

@styx: 'compare(" Kka "、" kk ")'は期待通りに '-1'を返します。どうしましたか? – Bergi

+0

@ベルギー、何らかの理由で私は働いていませんでしたが、今はうまくいきます、ありがとう – styx

3

なぜ使用しないのですか"Kk" === "kk"

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

OPは見えません。等価性をテストしたいが、むしろ[比較関数]を書く(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description) – Bergi

関連する問題