如何使用 ES9 的 Array.prototype.sort() 进行排序

如何使用 ES9 的 Array.prototype.sort() 进行排序

在前端开发中,我们经常需要对数组进行排序操作。在 ES5 中,我们可以使用 Array.prototype.sort() 方法来对数组进行排序,但在 ES9 中,该方法有了一些新的特性。

ES9 中的 Array.prototype.sort() 新增了以下两个功能:

1.现在可以对具有相同值但不同类型的元素进行排序;

2.现在可以传递一个回调函数到 Array.prototype.sort() 方法中,并根据回调函数的返回值对数组进行排序。

下面我们来具体了解一下如何使用 ES9 的 Array.prototype.sort() 方法进行排序。

  1. 对具有相同值但不同类型的元素进行排序

在 ES5 中,如果数组元素的类型不同,则 sort() 会按照转换为字符串的结果进行排序。比如,数字会被转换为字符串,然后根据 ASCII 码值进行比较。这样的排序方式有时候并不是我们想要的。

在 ES9 中,可以针对数组元素的值而不是类型进行排序。这是通过添加 sort() 方法的 new compare elements semantic 选项来实现的。

例如,我们有一个数组包含了数字和字符串类型的元素。

在 ES5 中,sort() 会将数字和字符串类型的元素按照 ASCII 码值进行排序,最终结果并不能满足我们的需求,排序后得到的结果也不是我们想要的。但是在 ES9 中,sort() 方法会将数字和字符串类型的元素按照他们的值进行排序,可以看到,排序结果是符合预期的。

  1. 传递回调函数

除了将数值和字符串类型的元素按值排序以外,ES9 的 Array.prototype.sort() 方法还支持传递一个回调函数,并根据回调函数的返回值对数组进行排序。这样的排序方式我们更熟悉,也是我们在 ES5 中应用最多的一种排序方式。

例如,我们有一个数组包含了对象,其中每个对象有一个数字属性,我们希望根据该数字属性对数组进行排序。我们可以通过传递一个回调函数来实现这一操作:

在这个例子中,我们按照对象的 age 属性进行排序。回调函数接受两个参数 a 和 b,分别表示要比较的两个元素,如果 a 应该排在 b 前,那么返回一个小于 0 的值,如果 a 应该排在 b 后,那么返回一个大于 0 的值,如果 a 和 b 的顺序不重要或者相等,那么返回 0。

总结:

在 ES9 中,Array.prototype.sort() 方法新增了两个功能,使得我们能够更加灵活、精确地对数组进行排序,这在实际业务场景中十分有用。在使用 sort() 方法时,需要注意两点:

  1. 如果要根据元素的值排序,需要加上 new compare elements semantic 选项,这样排序结果才与预期相符。

  2. 如果要传递回调函数来对数组进行排序,需要确保回调函数的返回值为数字,否则排序结果可能不符合预期。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653cf8017d4982a6eb6e3f05


纠错
反馈