Array.toSorted() 排序并返回新数组
最后更新:2026-10-13
Array.toSorted() 排序并返回新数组
toSorted 返回排序后的新数组,原数组保持不变。它是 sort 的非破坏性版本(ES2023 新增),在不希望修改原数据的场景更安全。
| 分类 | 数组 |
|---|---|
| ES 版本 | ES2023 |
📝 语法
const 新数组 = 数组.toSorted(比较函数);
⚙️ 参数
| compareFn | 可选。比较函数 (a, b) => 数字;省略时按字符串 UTF-16 顺序排序。 |
|---|
返回值:排序后的新数组,原数组不变。
是否修改原值:否(返回新值)
▶ 示例
编辑下方代码,点击运行,在输出面板查看结果:
运行结果:
[ 1, 2, 3, 10 ]
[ 3, 1, 10, 2 ]
[ 'apple', 'banana' ]
⚠️ 警告 浏览器兼容性比 sort 差得多(2023 年才进标准)。要兼容旧浏览器请用 [...arr].sort()。
ℹ️ info 同为非破坏性版本的还有 toReversed / toSpliced / with,统称"拷贝版数组方法"。
🌐 浏览器支持
| 浏览器 | |||||
|---|---|---|---|---|---|
| Array.toSorted() | ✓ v110 | ✓ v110 | ✓ v115 | ✓ v16.4 | ✓ v96 |
| 所有现代浏览器均支持 | |||||
🏷️ 相关数组方法
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
QtoSorted 和 sort 的区别?
Asort 原地修改原数组并返回它;toSorted 返回新数组,原数组不动。
Q为什么 [3,1,10,2] 直接排序结果是 [1,10,2,3]?
A省略比较函数时按字符串比较,"10" 排在 "2" 前面。数字排序必须传 (a, b) => a - b。
Q旧浏览器怎么办?
A用展开运算符复制再排序:[...arr].sort(...),效果等同且兼容性更好。