JavaScript中sort()默认按Unicode码点字符串排序,数字数组需传入比较函数:升序用a-b,降序用b-a,对象按属性排序需自定义逻辑,中文等国际化文本应使用localeCompare。
JavaScript 中 sort() 方法默认按字符串 Unicode 码点排序,直接调用数字数组会得到错误结果(比如 [10, 2, 33] 排成 [10, 2, 33]),必须传入比较函数才能正确排序数字或自定义逻辑。
这是最常用也最简洁的写法。返回值小于 0,a 排在 b 前;大于 0,b 排在 a 前;等于 0,顺序不变。
[5, 1, 9, 3].sort((a, b) => a - b) → [1, 3, 5, 9]
slice() 或展开运算符复制:[...arr].sort(...)
和升序逻辑相反,只需交换减数和被减数。
[5, 1, 9, 3].sort((a, b) => b - a) → [9, 5, 3, 1]
[-2.5, 0, 1.7].sort((a, b) => b - a) → [1.7, 0, -2.5]
比如按用户年龄升序,或按姓名字母顺序排列。
users.sort((a, b) => a.age - b.age)
users.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()))
items.sort((a, b) => a.type.localeCompare(b.type) || b.price - a.price)
直接用 sort() 对中文、带重音符号的字母(如 é, ñ)可能出错。推荐用 localeCompare 替代 > 或
比较。
['香蕉', '苹果', '橙子'].sort((a, b) => a.localeCompare(b))
words.sort((a, b) => a.localeCompare(b, 'zh'))
a.localeCompare(b, undefined, { sensitivity: 'base' })
基本上就这些。记住核心:不传函数 → 字符串排序;数字/对象/多条件 → 写比较函数;中文或国际化文本 → 优先用 localeCompare。