在前端开发中,Array 是我们经常使用的一种数据结构。而其中的 sort 方法,可以对数组中的元素进行排序,是我们经常使用的方法之一。而 ES10 中对 sort 方法进行了升级,增加了一些新的功能,本文将详细介绍这些新功能,并给出使用示例。
原有的 sort 方法
在介绍新功能之前,我们先来回顾一下原有的 sort 方法。
sort 方法可以接收一个函数作为参数,这个函数用于定义排序规则。如果不传入函数参数,则默认按照 Unicode 码位升序排序。
例如,对一个数字数组进行排序,可以这样写:
const arr = [3, 1, 4, 2]; arr.sort((a, b) => a - b); console.log(arr); // [1, 2, 3, 4]
上面的代码中,传入的函数是 (a, b) => a - b
,表示按照数字大小升序排序。
新功能一:稳定排序
在原有的 sort 方法中,如果对一个数组进行排序,相同的元素可能会发生位置交换,这个过程是不稳定的。
例如,对一个对象数组按照某个属性进行排序,可能会出现相同属性值的对象位置交换的情况:
const arr = [{name: 'Tom', age: 20}, {name: 'Jerry', age: 18}, {name: 'Bob', age: 20}]; arr.sort((a, b) => a.age - b.age); console.log(arr); // 输出:[{name: 'Jerry', age: 18}, {name: 'Tom', age: 20}, {name: 'Bob', age: 20}]
可以看到,年龄相同的两个对象的位置发生了交换。
而在 ES10 中,sort 方法增加了一个新的参数 options
,可以传入一个对象,其中的 stable
属性可以设置为 true
,表示排序过程需要保持稳定。
例如,对上面的例子进行稳定排序,可以这样写:
const arr = [{name: 'Tom', age: 20}, {name: 'Jerry', age: 18}, {name: 'Bob', age: 20}]; arr.sort((a, b) => a.age - b.age, {stable: true}); console.log(arr); // 输出:[{name: 'Jerry', age: 18}, {name: 'Tom', age: 20}, {name: 'Bob', age: 20}]
可以看到,年龄相同的两个对象的位置没有发生交换,排序结果保持了稳定性。
新功能二:默认排序
在原有的 sort 方法中,如果不传入排序函数参数,则按照 Unicode 码位升序排序。
而在 ES10 中,sort 方法增加了一个新的参数 options
,可以传入一个对象,其中的 numeric
属性可以设置为 true
,表示默认按照数字大小排序。
例如,对一个包含数字和字符串的数组进行排序,可以这样写:
const arr = [3, '1', 4, '2']; arr.sort(null, {numeric: true}); console.log(arr); // ['1', '2', 3, 4]
可以看到,按照数字大小排序后,字符串 '1'
和 '2'
都排在了数字 3
和 4
的前面。
总结
ES10 中对 sort 方法进行了升级,增加了稳定排序和默认排序两个新功能,使得 sort 方法更加灵活和方便。在实际开发中,可以根据实际需求选择合适的参数来使用 sort 方法,达到更好的排序效果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/658456b4d2f5e1655df0b1d1