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 → <code>a排在b前面-
a - b > 0→a排在b后面 - 适用于整数、小数、负数(如
[3.5, -1, 0, 10]→[-1, 0, 3.5, 10])
降序排序(从大到小)
只需调换减法顺序,让较大值优先:
- 写法:
arr.sort((a, b) => b - a) - 等价于
arr.sort((a, b) => -(a - b)) - 原数组
[5, 1, 9, 2]→[9, 5, 2, 1]
注意:sort() 是原地修改,会改变原数组
如果不想影响原始数组,先拷贝一份再排序:
- 用展开运算符:
[...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,慎用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











