Array.prototype.toSorted()

Baseline 2023
新推出

自 2023 年 7 月以来,此功能可在最新的设备和浏览器版本上运行。此功能可能不适用于旧设备或浏览器。

toSorted() 方法是 Array 实例的 复制 版本,对应 sort() 方法。它返回一个新数组,其中的元素按升序排序。

语法

js
toSorted()
toSorted(compareFn)

参数

compareFn 可选

一个用于确定元素顺序的函数。如果省略,数组元素将被转换为字符串,然后根据每个字符的 Unicode 码点值进行排序。有关更多信息,请参阅 sort()

返回值

一个包含升序排序元素的新数组。

描述

有关 compareFn 参数的更多信息,请参阅 sort()

稀疏数组 上使用时,toSorted() 方法会将空槽视作 undefined 值进行迭代。

toSorted() 方法是 通用 的。它只要求 this 值具有 length 属性和整数键属性。

示例

对数组进行排序

js
const months = ["Mar", "Jan", "Feb", "Dec"];
const sortedMonths = months.toSorted();
console.log(sortedMonths); // ['Dec', 'Feb', 'Jan', 'Mar']
console.log(months); // ['Mar', 'Jan', 'Feb', 'Dec']

const values = [1, 10, 21, 2];
const sortedValues = values.toSorted((a, b) => a - b);
console.log(sortedValues); // [1, 2, 10, 21]
console.log(values); // [1, 10, 21, 2]

有关更多使用示例,请参阅 sort()

在稀疏数组上使用 toSorted()

空槽被视为 undefined 值进行排序。它们始终被排序到数组的末尾,并且不会为它们调用 compareFn

js
console.log(["a", "c", , "b"].toSorted()); // ['a', 'b', 'c', undefined]
console.log([, undefined, "a", "b"].toSorted()); // ["a", "b", undefined, undefined]

在非数组对象上调用 toSorted()

toSorted() 方法读取 thislength 属性。然后,它会收集 0length - 1 范围内的所有现有整数键属性,对它们进行排序,然后将它们写入一个新数组。

js
const arrayLike = {
  length: 3,
  unrelated: "foo",
  0: 5,
  2: 4,
  3: 3, // ignored by toSorted() since length is 3
};
console.log(Array.prototype.toSorted.call(arrayLike));
// [4, 5, undefined]

规范

规范
ECMAScript® 2026 语言规范
# sec-array.prototype.tosorted

浏览器兼容性

另见