Skip to content

sort 的使用细节

JavaScript中,数组的sort方法默认是将元素转换为字符串,然后按照字符串的Unicode编码顺序进行排序。这意味着如果你直接对数字数组使用sort方法,结果可能不会如你所期望的那样按数值大小排序。 例如,对于数字数组 [5, 20, 1, 15],如果你直接调用sort方法,得到的结果可能是 [1, 15, 20, 5],这是因为 15 在字符串比较中被认为小于 20 和 5。 为了正确地对数字数组进行排序,你需要提供一个比较函数作为sort方法的参数。这个比较函数接收两个参数(通常称为a和b),并根据返回值来决定元素的顺序:

  • 如果返回值小于0,则a会被排列到b之前;
  • 如果返回值等于0,则a和b的相对位置不变;
  • 如果返回值大于0,则b会被排列到a之前。 下面是一个正确的数字数组排序示例:
js
let numbers = [5, 20, 1, 15]
numbers.sort((a, b) => a - b) // 升序排序
console.log(numbers) // 输出: [1, 5, 15, 20]

这里使用的比较函数 (a, b) => a - b 就是为了确保数字能够按照数值大小正确排序。如果你想让数组降序排序,可以简单地改变比较函数中的减法操作:

js
numbers.sort((a, b) => b - a) // 降序排序
console.log(numbers) // 输出: [20, 15, 5, 1]

这样,你就可以根据需要对数组进行升序或降序排序了。