array.prototype.tosorted 是 es2024 新增方法,返回排序后新数组而不修改原数组;它通过默认字符串排序或自定义 comparefn 实现安全、不可变的排序,兼容现代浏览器,旧环境可手动实现。

Array.prototype.toSorted 是 ES2024 新增的数组方法,专门用于**返回排序后的新数组,不修改原数组**——这正是它和传统 Array.prototype.sort() 的核心区别。
为什么 toSorted 更安全?
sort() 会直接修改原数组,容易引发意外副作用(比如多个地方引用同一数组时);toSorted() 始终返回一个新数组,原始数据完全不变,语义更清晰、更符合函数式编程习惯。
基本用法:默认按字符串升序排
不传参时,它会把每个元素转成字符串再比较:
const arr = [30, 1, 25, 10]; const sorted = arr.toSorted(); console.log(sorted); // [1, 10, 25, 30] console.log(arr); // [30, 1, 25, 10] ← 原数组没变
自定义排序逻辑:传入 compareFn
和 sort() 一样,你可以传一个比较函数控制顺序:
- 升序数字排列:
arr.toSorted((a, b) => a - b) - 降序数字排列:
arr.toSorted((a, b) => b - a) - 按对象属性排序:
items.toSorted((a, b) => a.name.localeCompare(b.name))
兼容性与替代方案
目前主流浏览器(Chrome 120+、Firefox 121+、Safari 17.4+)已支持 toSorted。如需兼容旧环境,可手动实现一个安全版本:
const toSorted = (arr, compareFn) => [...arr].sort(compareFn); // 用法相同:toSorted([3,1,4], (a,b) => a-b) → [1,3,4]











