JavaScript数组排序简写

当对一个原始值数组(例如字符串或数字)进行排序时,你经常会看到很多像这样的代码:

const arr = [8, 2, 1, 4, 5, 0];
// 升序排序
arr.sort((a, b) => {
  if (a > b) return 1;
  if (b > a) return -1
  return 0;
}); // [0, 1, 2, 4, 5, 8]

虽然这段代码可以完成任务,但也有一种一行代码的替代方法。这个技巧依赖于Array.prototype.sort()期望得到一个正值或负值来执行两个元素之间的交换,从而允许使用比1-1更灵活的值。只需对数组中的数值进行相减即可,这也可以用来反向排序数组:

const arr = [8, 2, 1, 4, 5, 0];
// 升序排序
arr.sort((a, b) => a - b); // [0, 1, 2, 4, 5, 8]
// 降序排序
arr.sort((a, b) => b - a); // [8, 5, 4, 2, 1, 0]

如果你正在处理字符串数组,你应该使用String.prototype.localeCompare(),因为它提供了更大的灵活性,可以考虑特定的语言环境和它们的独特需求:

const s = ['Hi', 'Hola', 'Hello'];
// 升序排序
arr.sort((a, b) => a.localeCompare(b)); // ['Hello', 'Hi', 'Hola']
// 降序排序
arr.sort((a, b) => b.localeCompare(a)); // ['Hola', 'Hi', 'Hello']