Array.prototype.toSorted()

基线 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 语言规范
# sec-array.prototype.tosorted

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅