这两者有重要区别:
nums.sort()
默认按字符串排序(字典序),即使数组里是数字也会被转换为字符串再比较:
javascript
let nums = [100, 4, 200, 1, 3, 2];
nums.sort(); // [1, 100, 2, 200, 3, 4]
console.log(nums); // 错误的顺序!
nums.sort((a, b) => a - b)
按数值大小升序排序:
javascript
let nums = [100, 4, 200, 1, 3, 2];
nums.sort((a, b) => a - b); // [1, 2, 3, 4, 100, 200]
console.log(nums); // 正确的顺序!
验证示例
javascript
let test1 = [100, 4, 200, 1, 3, 2];
console.log(test1.sort()); // [1, 100, 2, 200, 3, 4]
console.log(test1.sort((a, b) => a - b)); // [1, 2, 3, 4, 100, 200]
let test2 = [10, 2, 1];
console.log(test2.sort()); // [1, 10, 2]
console.log(test2.sort((a, b) => a - b)); // [1, 2, 10]
对于最长连续序列问题
使用 nums.sort() 会导致错误结果:
javascript
function longestConsecutiveWrong(nums) {
nums.sort();
console.log("排序后:", nums); // 错误的顺序
// 后面的逻辑会得到错误结果
// 比如 [100, 4, 200, 1, 3, 2] 排序后是 [1, 100, 2, 200, 3, 4]
// 会认为最长连续序列是 1 而不是 4
}
其他排序方式
javascript
// 升序排序
nums.sort((a, b) => a - b);
// 降序排序
nums.sort((a, b) => b - a);
// 按绝对值排序
nums.sort((a, b) => Math.abs(a) - Math.abs(b));
// 按字符串长度排序(如果元素是字符串)
strings.sort((a, b) => a.length - b.length);
所以对于数字排序,一定要使用 sort((a, b) => a - b) 而不是默认的 sort()。这是 JavaScript 中一个常见的陷阱!