在 JavaScript 中,数组是非常常用的数据结构之一。而数组的排序是一个非常基本的操作,JavaScript 中的 sort()
方法为我们提供了排序的功能。
在 ES7 中,通过给 sort()
方法添加一个新的参数 options
,我们可以实现数组的稳定排序。
什么是稳定排序
在简单介绍稳定排序前,我们可以看一下下面的数组:
-- -------------------- ---- ------- ----- --- - -- ----- ------- ---- -- -- - ----- ------ ---- -- -- - ----- ------- ---- -- ---
假设现在我们需要按照 age
字段升序排序这个数组,那么对于相同年龄的两个元素,我们希望它们的相对顺序仍然保持原来的位置,也就是排完序后的结果应该是这样的:
-- -------------------- ---- ------- -- ----- ------- ---- -- -- - ----- ------- ---- -- -- - ----- ------ ---- -- --
这种排序方式就被称之为稳定排序。相反的,如果我们希望对于相同的元素,它们的相对位置发生变化,那么这个排序就是不稳定的。
稳定排序的好处在于,在某些情况下会比不稳定排序更加适合我们的业务需求。
ES7 中的稳定排序
ES7 中为了实现数组的稳定排序提供了一个新的参数—— options
,options
可以是一个对象 literal,目前支持两个属性:
compareFunction
: 与普通的sort()
相同,用于比较两个元素的大小stable
: 一个布尔值,表示是否使用稳定排序
当 stable
为 true
时,排序是稳定的,相同元素的位置关系不会被改变。例如,在上面的示例中,我们可以这样排序:
-- -------------------- ---- ------- ----- --- - -- ----- ------- ---- -- -- - ----- ------ ---- -- -- - ----- ------- ---- -- --- ------------ -- -- ----- - ------ - ------- ---- ---
排序的结果就是我们期望的稳定排序结果:
-- -------------------- ---- ------- -- ----- ------- ---- -- -- - ----- ------- ---- -- -- - ----- ------ ---- -- --
当 stable
为 false
时,则表示不使用稳定排序,排序的结果会破坏相同元素原来的位置关系。
总结
ES7 中添加了一个新的稳定排序的功能,这个功能通过 sort()
方法的 options
参数实现。相比于不稳定排序,稳定排序可以更好地满足一些业务需求。
不过需要注意的是,虽然稳定排序可以在一些场景中带来方便,但它可能会有一些额外的性能损耗。如果你的排序需求不要求稳定排序,那么还是建议使用普通的 sort()
方法以获得更好的性能。
示例代码
-- -------------------- ---- ------- ----- --- - -- ----- ------- ---- -- -- - ----- ------ ---- -- -- - ----- ------- ---- -- --- -- ---- ------------ -- -- ----- - ------ - ------- ---- --- ----------------- -- -- ----- ------- ---- -- -- - ----- ------- ---- -- -- - ----- ------ ---- -- -- -- ----- ------------ -- -- ----- - ------ - ------- ----- --- ----------------- -- -- ----- ------- ---- -- -- - ----- ------ ---- -- -- - ----- ------- ---- -- --
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64eeac02f6b2d6eab38a1d71