在 JavaScript 的开发中,对数组进行排序是一项常见的操作。ES6 之前,我们只能使用 Array.prototype.sort()
方法来对数组进行排序,但是在排序的过程中,有些情况下我们需要对相同的元素保持原来的顺序,这就需要用到稳定排序。ES10 中,Array.prototype.sort()
方法已经支持稳定排序了,本文将介绍如何使用稳定排序。
什么是稳定排序
稳定排序是指,当排序的元素中有两个或多个元素值相同时,排在前面的元素在排序后仍然排在前面。简单来说,就是相同元素按照原来的顺序排序。比如下面的数组:
const arr = [ { name: 'Tom', age: 20 }, { name: 'Jerry', age: 18 }, { name: 'Bob', age: 20 }, ];
按照年龄排序,如果使用稳定排序,排序后的数组应该是:
[ { name: 'Jerry', age: 18 }, { name: 'Tom', age: 20 }, { name: 'Bob', age: 20 }, ]
可以看到,年龄相同的元素按照原来的顺序排序。
如何使用稳定排序
在 ES10 中,Array.prototype.sort()
方法新增了一个可选参数 compareFunctionOptions
,用来指定排序的方式。其中,compareFunctionOptions
可以是一个字符串,也可以是一个对象。如果是一个字符串,可以取值为 'asc'
、'desc'
、'locale'
和 'number'
,分别代表升序、降序、本地化排序和数字排序。如果是一个对象,则可以指定 compareFunction
和 stable
两个属性,其中 compareFunction
表示排序函数,stable
表示是否使用稳定排序。
下面是一个使用稳定排序的示例代码:
const arr = [ { name: 'Tom', age: 20 }, { name: 'Jerry', age: 18 }, { name: 'Bob', age: 20 }, ]; arr.sort({ compareFunction: (a, b) => a.age - b.age, stable: true, }); console.log(arr);
输出结果为:
[ { name: 'Jerry', age: 18 }, { name: 'Tom', age: 20 }, { name: 'Bob', age: 20 }, ]
可以看到,使用稳定排序后,年龄相同的元素按照原来的顺序排序。
总结
稳定排序是一项常见的操作,在 ES10 中,Array.prototype.sort()
方法新增了一个可选参数 compareFunctionOptions
,可以用来指定排序的方式,其中包括稳定排序。使用稳定排序可以保持相同元素的顺序不变,方便开发者进行后续的操作。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65bb7ee7add4f0e0ff454177