localcompare按字母顺序区分大小写



我想在这里实现aAbBcC。我尝试了en-US期望得到理想的结果。在"Acuityads"之前期待"alpha"。

var array = [{name:"Acuityads"},{name:"alpha"}];
console.log(array.sort(function(a,b){return a.name.localeCompare(b.name, 
'en-US-u-kf-lower'); }));

console.log(array.sort(function(a,b){return a.name.localeCompare(b.name, 
'en-US'); }));
"alpha".localeCompare("Acuityads", 'en-US') // output as 1

正如在评论中讨论的那样,这看起来像是规范或供应商实现中的不一致。
由于之前关于同一主题的问题没有任何答案,所以我很乐意回答,这里有一个手动实现:

const input = ["aaaaa", "aaa", "aa", "aaaa", "aA", "Aa", "AA", "ab", "aB", "Ab", "AB"];
function caseSensitiveCompare(a, b) {
// Sort character by character, return early if possible
for (let ii = 0; ii < Math.max(a.length, b.length); ii++) {
const aChar = a.charAt(ii);
const bChar = b.charAt(ii);
// If inputs match up to here, but lengths don't match, sort by length
if (!(aChar && bChar)) {
return a.length - b.length;
}
// If we meet a differing character, return early
const comp = aChar.localeCompare(bChar);
if (comp !== 0) {
return comp;
}
}
// If we found nothing to do, the strings are equal
return 0;
}
console.log(input.sort(caseSensitiveCompare));

最新更新