在 ES12 中,Array 新增了一个 sort() 功能,用于对数组进行排序。此功能虽然并非全新程式语言中的创新,但对于前端开发人员而言,它是非常实用的。本文将详细介绍该功能,并提供示例代码,以帮助读者更好地了解和应用。
sort() 快速概述
sort() 是 Array 对象的一个方法,用于对数组中的元素进行排序。排序可以是升序或降序。在默认情况下,sort() 方法将字符串转化为 Unicode,并按每个字符的 Unicode 代码点值的顺序进行排序。在进行数字排序的情况下,sort() 方法可通过比较函数来指定数字排序的规则。
sort() 方法的内部机制
sort() 方法有四个参数。前两个是可选的,分别为 compareFunction 和 sortOrder。第三个参数是未用的,并且已弃用;第四个是可选的,并包含一个未排序的数组,被称为 stabilizingSortedArray。该数组用于使排序更加稳定。
sort() 方法对数组进行重新排列,它不将排序的结果创建成一个新的数组。相反,它修改了原来的数组。在这个过程中,sort() 方法执行的是修改数组原始顺序的行为。排序后的数组仅包含原始数组中的引用。原始数组在此过程中不会被复制或克隆。
sort() 方法的参数
compareFunction
compaireFunction 是一个可选的函数参数。它定义了排序规则,并返回一个整数值,指示元素 A 与元素 B 之间的关系。compaireFunction 参数采用两个参数: A 和 B,它们与排序数组中的两个值相对应。compareFunction 在调用之后返回大于 0,小于 0 或等于 0 的整数值。
如果 compareFunction 未提供,则 sort() 将按字符串 Unicode 码点进行排序,在排序数组中进行升序排列。
下面的代码段展示了如何使用 compareFunction 进行数字排序:
let numbers = [10, 30, 20, 5]; numbers.sort((a, b) => a - b); console.log(numbers); // 输出: [5, 10, 20, 30]
sortOrder
sortOrder 是一个可选的字符串参数,它可以是“asc”或“desc”,用于确定排序的方向。默认排序是升序排列。“desc”将数组元素从高到低排列。
下面的示例说明了如何将数组按降序排列:
let fruits = ["banana", "apple", "mango", "kiwi"]; fruits.sort().reverse(); console.log(fruits); // 输出: ["mango", "kiwi", "banana", "apple"]
stabilizingSortedArray
stabilizingSortedArray 是未排序的数组,在 sort() 过程中用于使排序尽可能稳定。稳定排序意味着,如果排序前两个元素相同,则排序后它们的顺序应该保持不变。此数组是可选的,如果未提供,则在 sort() 过程中不考虑稳定性。
在实际应用中使用 sort()
ES12 中新增的 sort() 方法为前端开发人员提供了一种新的方式,使他们能够快速、简便地对数组进行排序。以下代码段展示了在实际应用中如何使用该方法:
let people = [ { name: "Peter", age: 20 }, { name: "John", age: 30 }, { name: "Andrew", age: 25 }, { name: "Chris", age: 35 } ]; people.sort((a, b) => b.age - a.age); console.log(people);
输出:
[ { name: "Chris", age: 35 }, { name: "John", age: 30 }, { name: "Andrew", age: 25 }, { name: "Peter", age: 20 } ]
在本示例中,people 变量是一个对象数组。我们使用 sort() 方法按年龄对这些人进行排序,并输出结果。使用如此简单的语法,我们能够快速获得所需的结果。
总结
在本文中,我们详细介绍了 ES12 中新增的 sort() 方法。我们了解了该方法的内部机制,并讨论了它的参数和用法。sort() 对于开发人员而言是一种非常强大的工具,可用于升序和降序排序数组。通过使用 compareFunction 和 sortOrder,我们可以轻松地控制排序行为,以便获得所需的结果。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a24feaadd4f0e0ffa6c599