ES10 的新特性:Array.prototype.sort() 方法详解

阅读时长 4 分钟读完

在 ES2019 中,Array.prototype.sort() 方法得到了更新,使它更加强大和灵活。在本文中,我们将深入探讨这些新特性,并学习如何更好地使用该方法。

基本语法

Array.prototype.sort() 方法可以按字母表顺序将数组元素排序,也可以根据数组元素中的数字进行排序。默认情况下,该方法会将数组元素作为字符串进行比较。

根据 ASCII 码表,数字 1 的字符编码为 49,数字 2 的字符编码为 50,因此数字 1 排在数字 2 的前面。

排序方法

在 ES2019 中,Array.prototype.sort() 方法可以接收一个函数作为参数,用于指定排序方法。

上述代码中,我们传递了一个排序函数作为参数,它将按数字的大小进行比较。当 a 小于 b 时,返回一个负数,表示 a 应该排在 b 的前面;当 a 等于 b 时,返回 0,表示 a 和 b 的相对位置不变;当 a 大于 b 时,返回一个正数,表示 a 应该排在 b 的后面。

也可以根据数组的其他属性进行排序,例如对字符串数组按长度进行排序:

在上述代码中,我们指定了排序函数 (a, b) => a.length - b.length,它按字符长度对字符串进行排序。

稳定性

将稳定性纳入排序算法的考虑,是 ES2019 中 Array.prototype.sort() 方法的另一个重要改进。稳定排序算法将相等元素的相对顺序保持不变。

在 ES2019 之前的版本中,Array.prototype.sort() 方法并不保证排序的稳定性。以下示例很好地说明了这一点:

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

上述代码中,我们尝试以 age 为排序依据对人员信息进行排序,但稳定性并未得到保证。由于 Alice 和 Cathy 的年龄相同,它们之间的相对顺序在排序后并未得到保留。

而在 ES2019 中,Array.prototype.sort() 方法将保证排序的稳定性。修改示例代码:

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

现在,通过在 sorting 函数中指定正确的返回值,我们可以保持相等元素的相对顺序。

结论

Array.prototype.sort() 方法是 JavaScript 数组操作中的一个关键方法。在 ES2019 中,该方法被赋予了更大的灵活性和稳定性。掌握新特性,我们可以更好地处理各种排序问题。

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

纠错
反馈