我想在2个字符串之间实现区分大小写的比较。 这是我到目前为止所做的,它运作得不好
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("Kk","kk"));
我按预期得到-1,但是如果我正在做console.log(compare("Kka","kk"));
我得到1并且我不知道为什么。
答案 0 :(得分:3)
为什么不只使用"Kk" === "kk"
?
function compare(x, y) {
return x === y;
// or return x === y ? 1 : -1
}
答案 1 :(得分:1)
有两个拼写错误,您写的是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);
}
}
顺便说一句,最后一个return语句是不必要的,因为if和else都包含return语句。
有更简单的方法可以做到这一点,但我认为你正在努力实现这一目标。
答案 2 :(得分:0)
类似的东西:
console.log('a'.localeCompare('A', { sensitivity: 'variant' }));
如果需要,可以添加区域设置等。