nums.sort()和nums.sort((a, b) => a - b)

这两者有重要区别

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 中一个常见的陷阱!

相关推荐
香芋芋圆7 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
INS_KF7 小时前
【编程笔记】成员函数中两个 const 的区别(const Data &getData() const;)
前端·javascript·笔记
宿6748 小时前
vue3-async
前端·javascript·vue.js
excel9 小时前
Nuxt + Twin CSS 中宽度超过屏幕时底部出现空白的原因与解决方案
前端·javascript
一个游离的指针12 小时前
函数管道:消除深度嵌套调用
前端·javascript
柚yuzumi12 小时前
前端优化,从少触发一次开始:防抖与节流
前端·javascript
默_笙12 小时前
🚤 CSS 布局的"圈地运动":BFC 就是浏览器的独立领地
前端·javascript
用户9385156350713 小时前
大模型记忆指南:从短时缓存到永久记忆,手把手带你吃透 LangChain Memory 管理
javascript·人工智能
xqchen13 小时前
Web Components 普及困境深度解析:技术标准与工程实践的落差
javascript
爱丶不疚13 小时前
写给前端工程师的现代 Python 工程化最佳实践:从 pnpm 到 uv,从 CommonJS 到 src-layout
javascript·python·typescript