ES10:新特性 —— 稳定的 Array.prototype.sort()

阅读时长 4 分钟读完

随着 JavaScript 的发展,新的 ECMAScript 版本不断推出,每个版本都带来了许多新特性和改进。ES10(也称为 ECMAScript 2019)是其中的一次重要更新,其中最令人期待的新特性之一就是 Array.prototype.sort() 的稳定性。

在 ES10 之前,Array.prototype.sort() 的排序顺序是不确定的,这意味着相等的元素可能会被交换位置。这样的排序被称为“不稳定排序”。例如,以下代码:

-- -------------------- ---- -------
----- --- - -
  - ----- -------- ---- -- --
  - ----- ------ ---- -- --
  - ----- ---------- ---- -- --
--

------------ -- -- ----- - -------

-----------------
展开代码

在 ES10 之前的版本中,该代码的输出可能是:

可以看到,年龄相同的 Alice 和 Charlie 被交换了位置。这种不稳定性可能会导致一些问题,例如在表格中对数据进行排序时,可能会破坏原始数据的行顺序。

在 ES10 中,Array.prototype.sort() 的排序顺序已经被规定为稳定的。这意味着相等的元素将保持原来的顺序。例如,上面的代码在 ES10 中的输出将是:

这里 Alice 和 Charlie 的顺序保持不变,这就是稳定排序的好处。

除了稳定性之外,ES10 还为 Array.prototype.sort() 带来了一个新的参数:options。这个参数是一个对象,可以用来指定排序顺序和排序方式。例如,以下代码:

-- -------------------- ---- -------
----- --- - -
  - ----- -------- ---- -- --
  - ----- ------ ---- -- --
  - ----- ---------- ---- -- --
--

------------ -- -- ----- - ------ - ------- ---- ---

-----------------
展开代码

在 ES10 中,该代码的输出将是:

这里的 options.stable 被设置为 true,表示进行稳定排序。如果将其设置为 false(默认值),则排序将是不稳定的。

此外,options 对象还可以包含一个 compareFunction 属性,用于指定排序方式。例如,以下代码:

-- -------------------- ---- -------
----- --- - -
  - ----- -------- ---- -- --
  - ----- ------ ---- -- --
  - ----- ---------- ---- -- --
--

---------- ------- ----- ---------------- --- -- -- ---------------------------- ---

-----------------
展开代码

在 ES10 中,该代码的输出将是:

这里的 compareFunction 使用了 String.prototype.localeCompare() 方法,按字母顺序对名字进行排序。由于 options.stable 被设置为 true,相等的元素将保持原来的顺序。

总之,ES10 中的 Array.prototype.sort() 稳定性为开发人员带来了许多好处。现在,您可以放心地对数组进行排序,而不必担心元素的顺序会被破坏。如果需要进行稳定排序,只需将 options.stable 设置为 true。如果需要自定义排序方式,可以使用 options.compareFunction。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d2505ba941bf71344612b2

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试