array.prototype.tosorted() 是 es2024 新增的纯函数式数组排序方法,返回新排序数组而不修改原数组;支持默认字符串比较、数值及字符串自定义比较函数、对象属性排序,chrome 120+等现代浏览器已支持。

Array.prototype.toSorted() 是 ES2024 新增的数组方法,专门用于返回一个**排序后的新数组**,而不会修改原数组。它和传统的 sort() 方法不同——后者直接改变原数组,需要先用 slice() 或展开运算符复制才能避免副作用。
基本用法:升序排序数字或字符串
对简单类型(如数字、字符串)排序时,可直接调用 toSorted(),不传参数即按字符串 Unicode 码点升序排列(注意:数字会转为字符串比较,所以 [10, 2, 30].toSorted() 得到 [10, 2, 30],不是数值顺序)。
若需数值升序,必须传入比较函数:
-
[10, 2, 30].toSorted((a, b) => a - b)→[2, 10, 30] -
['banana', 'apple', 'cherry'].toSorted()→['apple', 'banana', 'cherry'](字符串默认行为通常符合预期)
支持自定义比较函数,和 sort 一致
它的比较函数签名与 Array.prototype.sort 完全相同:接收两个参数 a 和 b,返回负数、零或正数来决定顺序。
- 升序:
(a, b) => a - b(数字)、(a, b) => a.localeCompare(b)(字符串,更健壮) - 降序:
(a, b) => b - a或(a, b) => b.localeCompare(a) - 对象排序:
users.toSorted((a, b) => a.age - b.age)
原数组完全不受影响
这是 toSorted() 的核心价值。无论怎么排序,原始数组保持不变:
const arr = [3, 1, 4]; const sorted = arr.toSorted((a, b) => a - b); // sorted 是 [1, 3, 4] // arr 仍是 [3, 1, 4] —— 没有被修改
浏览器兼容性与替代方案
目前(2024 年中)Chrome 120+、Firefox 123+、Safari 17.4+ 已支持。旧环境可用以下方式安全降级:
- 用展开运算符 +
sort():[...arr].sort((a,b)=>a-b) - 用
slice()+sort():arr.slice().sort((a,b)=>a-b) - TypeScript 用户注意:需确保
lib配置包含es2024或更高版本
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











