在 ES2019 中,Array.prototype.sort() 方法得到了更新,使它更加强大和灵活。在本文中,我们将深入探讨这些新特性,并学习如何更好地使用该方法。
基本语法
Array.prototype.sort() 方法可以按字母表顺序将数组元素排序,也可以根据数组元素中的数字进行排序。默认情况下,该方法会将数组元素作为字符串进行比较。
const arr = [1, 2, 11, 20, 21, 100, 101]; arr.sort(); // [1, 100, 101, 11, 2, 20, 21]
根据 ASCII 码表,数字 1 的字符编码为 49,数字 2 的字符编码为 50,因此数字 1 排在数字 2 的前面。
排序方法
在 ES2019 中,Array.prototype.sort() 方法可以接收一个函数作为参数,用于指定排序方法。
const arr = [1, 2, 11, 20, 21, 100, 101]; arr.sort((a, b) => a - b); // [1, 2, 11, 20, 21, 100, 101]
上述代码中,我们传递了一个排序函数作为参数,它将按数字的大小进行比较。当 a 小于 b 时,返回一个负数,表示 a 应该排在 b 的前面;当 a 等于 b 时,返回 0,表示 a 和 b 的相对位置不变;当 a 大于 b 时,返回一个正数,表示 a 应该排在 b 的后面。
也可以根据数组的其他属性进行排序,例如对字符串数组按长度进行排序:
const arr = ['apple', 'banana', 'orange', 'kiwi', 'pear']; arr.sort((a, b) => a.length - b.length); // ['kiwi', 'pear', 'apple', 'banana', 'orange']
在上述代码中,我们指定了排序函数 (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