在本教程中,我们将借助示例了解 JavaScript Array sort() 方法。
sort()
方法按特定顺序(升序或降序)对数组的项进行排序。
示例
let city = ["California", "Barcelona", "Paris", "Kathmandu"];
// sort the city array in ascending order
let sortedArray = city.sort();
console.log(sortedArray);
// Output: [ 'Barcelona', 'California', 'Kathmandu', 'Paris' ]
sort() 语法
用法:
arr.sort(compareFunction)
这里,arr
是一个数组。
参数:
sort()
方法包含:
compareFunction
(可选) - 用于定义自定义排序顺序。
返回:
- 在对数组元素进行适当排序后返回数组(这意味着它会更改原始数组并且不进行复制)。
示例 1:对数组的元素进行排序
当compareFunction
没有通过时,
- 所有非
undefined
数组元素首先转换为字符串。 - 然后使用它们的 UTF-16 代码点值比较这些字符串。
- 排序按升序进行。
- 所有
undefined
元素都排序到数组的末尾。
// sorting an array of strings
var names = ["Adam", "Jeffrey", "Fabiano", "Danil", "Ben"];
// returns the sorted array
console.log(names.sort());
// modifies the array in place
console.log(names);
var priceList = [1000, 50, 2, 7, 14];
priceList.sort();
// Number is converted to string and sorted
console.log(priceList)
输出
[ 'Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey' ] [ 'Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey' ] [ 1000, 14, 2, 50, 7 ]
在这里,我们可以看到names
数组按字符串的升序排序。例如,亚当来之前丹尼尔因为"A"来之前"D".
由于所有未定义的元素在排序之前都转换为字符串,因此 Number
数据类型按该顺序排序。
在这里,我们可以看到,即使 1000 在数字上大于 50,它也出现在排序列表的开头。这是因为"1" < "5"。
示例 2:使用自定义函数排序
当compareFunction
通过时,
- 所有非
undefined
数组元素根据compareFunction
的返回值排序。 - 所有未定义的元素都排序到数组的末尾,并且不为它们调用
compareFunction
。
假设我们要对上面的names
数组进行排序,使得最长的名称排在最后,而不是按字母顺序排序。我们可以通过以下方式做到这一点:
// custom sorting an array of strings
var names = ["Adam", "Jeffrey", "Fabiano", "Danil", "Ben"];
function len_compare(a, b){
return a.length - b.length;
}
// sort according to string length
names.sort(len_compare);
console.log(names);
输出
[ 'Ben', 'Adam', 'Danil', 'Jeffrey', 'Fabiano' ]
在这里,排序基于逻辑 a.length - b.length
。这本质上意味着长度较短的项目将出现在 Array
的开头。
让我们首先了解可选的compareFunction
是如何工作的。
任何 compareFunction
都具有以下语法:
function (a, b){
// sorting logic
// return a Number
}
sort()
方法通过一次将两个值传递给 compareFunction
来比较数组的所有值。 a
和b
这两个参数分别代表这两个值。
compareFunction
应该返回一个 Number
。此返回值用于按以下方式对元素进行排序:
- 如果返回值 < 0,
a
排在前面b
(a
来之前b
)。 - 如果返回值 > 0,
b
排在前面a
(b
来之前a
)。 - 如果返回值 == 0,
a
和b
相对于彼此保持不变。
在示例 2 中,我们使用以下命令对数组进行排序:
function len_compare(a, b){
return a.length - b.length;
}
这里:
- 如果a.length - b.length < 0,
a
来之前b
.例如,"Adam"来之前"Jeffrey"作为4 - 7 < 0. - 如果a.length - b.length > 0,
b
来之前a
.例如,"Danil"紧接着"Ben"作为5 - 3 > 0。 - 如果a.length - b.length == 0,他们的位置不变。例如,相对位置"Jeffrey"和"Fabiano"不变,因为7 - 7 == 0.
我们可以看到,这导致根据字符串的长度升序对字符串进行排序。
示例 3:对数字进行数字排序
由于所有未定义的元素在对它们进行排序之前都会转换为字符串,因此默认情况下我们不能使用它们的数值对数字进行排序。
让我们看看如何使用自定义函数来实现它。
// numeric sorting
// define array
var priceList = [1000, 50, 2, 7, 14];
// sort() using function expression
// ascending order
priceList.sort(function (a, b) {
return a - b;
});
// Output: Ascending - 2,7,14,50,1000
console.log("Ascending - " + priceList);
// sort() using arrow function expression
// descending order
priceList.sort((a, b) => b - a);
// Output: Descending - 1000,50,14,7,2
console.log("Descending - " + priceList);
输出
Ascending - 2,7,14,50,1000 Descending - 1000,50,14,7,2
在此示例中,我们使用以下方法对数组进行排序:
function (a, b) {
return a - b;
}
这里,
- 如果a - b < 0,
a
来之前b
.例如,2来之前7作为2 - 7 < 0. - 如果a - b > 0,
b
来之前a
.例如,1000紧接着50作为1000 - 50 > 0。
我们可以看到,这导致根据数字的升序对数字进行排序。
同样,我们可以使用b - a
对它们进行降序排序。注意,我们也可以使用 ES2015 中定义的箭头函数表达式。
我们还可以使用内置数组reverse()
方法反转(降序)排序数组。要了解更多信息,请访问JavaScript Array reverse()。
相关用法
- JavaScript Array sort()用法及代码示例
- JavaScript Array some()用法及代码示例
- JavaScript Array shift()用法及代码示例
- JavaScript Array slice()用法及代码示例
- JavaScript Array splice()用法及代码示例
- JavaScript Array fill()用法及代码示例
- JavaScript Array flatMap()用法及代码示例
- JavaScript Array length用法及代码示例
- JavaScript Array isArray()用法及代码示例
- JavaScript Array values()用法及代码示例
- JavaScript Array entries()用法及代码示例
- JavaScript Array includes()用法及代码示例
- JavaScript Array find()用法及代码示例
- JavaScript Array unshift()用法及代码示例
- JavaScript Array pop()用法及代码示例
- JavaScript Array indexOf()用法及代码示例
- JavaScript Array reverse()用法及代码示例
- JavaScript Array lastIndexOf()用法及代码示例
- JavaScript Array flat()用法及代码示例
- JavaScript Array forEach()用法及代码示例
注:本文由纯净天空筛选整理自 JavaScript Array sort()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。