1

假设我有一个如下的 Javascript 数组,并且在将数组打印到控制台之前对数组进行了排序

var f = ["Salil", "Sam", "Anil", "John", "ajay", "Baba"];
f.sort();
console.log(f);

它打印如下

阿尼尔、爸爸、约翰、萨利尔、萨米尔、杰伊

为什么ajay打印最后,第一个字母的大小写如何起作用?

谢谢,

萨利尔

4

3 回答 3

1

因为小写字母排在大写字母之后。

要启用无大小写排序,请尝试以下操作:

f.sort(function(a,b) {return a.toLowerCase() < b.toLowerCase() ? -1 : 1;});
于 2013-09-09T18:33:50.400 回答
1

在 Unicode 中,小写字母在大写字母之后(至少在基本代码页中)。

您可以排序,以便您不注意大小写:

f.sort(function(w1, w2) {
  w1 = w1.toLowerCase(); w2 = w2.toLowerCase();
  return w1 < w2 ? -1 : w2 < w1 ? 1 : 0;
}

更复杂的排序规则需要更复杂的比较例程。您传递给的函数.sort()应该有两个参数,它们是要比较的数组的两个成员。比较器函数总是为任何两个字符串返回相同的答案(按任意顺序!),这一点非常重要,否则事情会变得很奇怪。

于 2013-09-09T18:33:39.750 回答
0

这是一个长形式的示例,使整个 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

于 2013-09-09T18:43:29.257 回答