ES7 中的数组稳定排序方法 sort

阅读时长 4 分钟读完

在 JavaScript 中,数组是非常常用的数据结构之一。而数组的排序是一个非常基本的操作,JavaScript 中的 sort() 方法为我们提供了排序的功能。

在 ES7 中,通过给 sort() 方法添加一个新的参数 options,我们可以实现数组的稳定排序。

什么是稳定排序

在简单介绍稳定排序前,我们可以看一下下面的数组:

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

假设现在我们需要按照 age 字段升序排序这个数组,那么对于相同年龄的两个元素,我们希望它们的相对顺序仍然保持原来的位置,也就是排完序后的结果应该是这样的:

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

这种排序方式就被称之为稳定排序。相反的,如果我们希望对于相同的元素,它们的相对位置发生变化,那么这个排序就是不稳定的。

稳定排序的好处在于,在某些情况下会比不稳定排序更加适合我们的业务需求。

ES7 中的稳定排序

ES7 中为了实现数组的稳定排序提供了一个新的参数—— optionsoptions 可以是一个对象 literal,目前支持两个属性:

  • compareFunction: 与普通的 sort() 相同,用于比较两个元素的大小
  • stable: 一个布尔值,表示是否使用稳定排序

stabletrue 时,排序是稳定的,相同元素的位置关系不会被改变。例如,在上面的示例中,我们可以这样排序:

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

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

排序的结果就是我们期望的稳定排序结果:

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

stablefalse 时,则表示不使用稳定排序,排序的结果会破坏相同元素原来的位置关系。

总结

ES7 中添加了一个新的稳定排序的功能,这个功能通过 sort() 方法的 options 参数实现。相比于不稳定排序,稳定排序可以更好地满足一些业务需求。

不过需要注意的是,虽然稳定排序可以在一些场景中带来方便,但它可能会有一些额外的性能损耗。如果你的排序需求不要求稳定排序,那么还是建议使用普通的 sort() 方法以获得更好的性能。

示例代码

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

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

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

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

纠错
反馈