JavaScript数组sort()默认按Unicode排序,数字需用(a,b)=>a-b升序或(b,a)=>b-a降序;原地修改,应先拷贝再排序;含非数元素时需过滤或转数字处理。

JavaScript 对一维数组排序主要靠 Array.prototype.sort() 方法,但默认按字符串 Unicode 码点排序,直接用会导致数字排序出错(比如 [10, 2, 33] 排成 [10, 2, 33])。要正确按数值升序或降序,必须传入自定义比较函数。
升序排序(从小到大)
比较函数返回负数、0 或正数,决定元素相对位置。升序时让较小值排在前面:
- 写法:
arr.sort((a, b) => a - b) -
a - b < 0→a排在b前面 -
a - b > 0→a排在b后面 - 适用于整数、小数、负数(如
[3.5, -1, 0, 10]→[-1, 0, 3.5, 10])
降序排序(从大到小)
只需调换减法顺序,让较大值优先:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 写法:
arr.sort((a, b) => b - a) - 等价于
arr.sort((a, b) => -(a - b)) - 原数组
[5, 1, 9, 2]→[9, 5, 2, 1]
注意:sort() 是原地修改,会改变原数组
如果不想影响原始数组,先拷贝一份再排序:
立即学习“Java免费学习笔记(深入)”;
- 用展开运算符:
[...arr].sort((a, b) => a - b) - 用
slice():arr.slice().sort((a, b) => b - a) - 避免意外覆盖原数据,尤其在函数中传递数组时
特殊值处理(可选补充)
若数组含 null、undefined、非数字字符串,需额外过滤或转换:
- 只保留数字:
arr.filter(x => typeof x === 'number' && !isNaN(x)).sort((a, b) => a - b) - 转为数字再排(容错):
arr.sort((a, b) => Number(a) - Number(b)),但Number('abc')是NaN,慎用

















