假设我有一个如下的 Javascript 数组,并且在将数组打印到控制台之前对数组进行了排序
var f = ["Salil", "Sam", "Anil", "John", "ajay", "Baba"];
f.sort();
console.log(f);
它打印如下
阿尼尔、爸爸、约翰、萨利尔、萨米尔、杰伊
为什么ajay打印最后,第一个字母的大小写如何起作用?
谢谢,
萨利尔
假设我有一个如下的 Javascript 数组,并且在将数组打印到控制台之前对数组进行了排序
var f = ["Salil", "Sam", "Anil", "John", "ajay", "Baba"];
f.sort();
console.log(f);
它打印如下
阿尼尔、爸爸、约翰、萨利尔、萨米尔、杰伊
为什么ajay打印最后,第一个字母的大小写如何起作用?
谢谢,
萨利尔
因为小写字母排在大写字母之后。
要启用无大小写排序,请尝试以下操作:
f.sort(function(a,b) {return a.toLowerCase() < b.toLowerCase() ? -1 : 1;});
在 Unicode 中,小写字母在大写字母之后(至少在基本代码页中)。
您可以排序,以便您不注意大小写:
f.sort(function(w1, w2) {
w1 = w1.toLowerCase(); w2 = w2.toLowerCase();
return w1 < w2 ? -1 : w2 < w1 ? 1 : 0;
}
更复杂的排序规则需要更复杂的比较例程。您传递给的函数.sort()
应该有两个参数,它们是要比较的数组的两个成员。比较器函数总是为任何两个字符串返回相同的答案(按任意顺序!),这一点非常重要,否则事情会变得很奇怪。
这是一个长形式的示例,使整个 if/else if/else 链更清晰,用于从排序比较中返回 -1/1/0:
var caseInsensitiveComparator = function(a, b) {
var _a = a.toLowerCase(),
_b = b.toLowerCase();
if (_a < _b) {
return -1;
} else if (_b < _a) {
return 1;
} else {
return 0;
}
};
var f = ["Salil", "Sam", "Anil", "John", "ajay", "Baba"];
f.sort(caseInsensitiveComparator);
console.log(f);
> ["ajay", "Anil", "Baba", "John", "Salil", "Sam"]
Array.prototype.sort 上的Mozilla 开发人员网络页面对工作原理进行了解释sort
。