在 JavaScript 中,如果想要对数组的元素进行排序,常用的方法有以下 2 种。
- sort()。
- toSorted()。
使用 sort() 对数组排序
在 JavaScript 中,我们可以使用 sort() 方法来对数组元素进行排序(升序或降序)。sort() 方法会直接修改原数组。
语法:
arr.sort(compareFn)说明:
sort() 方法可以接收单个参数。
compareFn(可选):它是一个自定义函数,数组会根据这个函数来判断是升序还是降序。
示例 1:sort() 实现升序
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
function fn (a, b) {
return a - b;
}
const arr = [3, 9, 1, 12, 50, 21];
arr.sort(fn);
console.log(arr);
</script>
</body>
</html>运行结果如下。
[ 1, 3, 9, 12, 21, 50 ]分析:
如果想要使用 sort() 方法来实现升序,小伙伴们可以认为上面 fn 的写法是固定的。我们这样定义之后,sort() 方法就会自动实现升序。
示例 2:sort() 实现降序
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
function fn (a, b) {
return b - a;
}
const arr = [3, 9, 1, 12, 50, 21];
arr.sort(fn);
console.log(arr);
</script>
</body>
</html>运行结果如下。
[ 50, 21, 12, 9, 3, 1 ]提示: 关于 sort() 的更详细用法,另请参阅:JavaScript 数组 sort() 方法。
使用 toSorted() 对数组排序
toSorted() 方法是 ECMAScript 2023 (ES6+) 引入的一个新方法,它的语法与 sort() 方法几乎是一样的。
语法:
arr.toSorted(compareFn)说明:
toSorted() 方法可以接收单个参数。
compareFn(可选):它是一个自定义函数,数组会根据这个函数来判断是升序还是降序。
注意: sort() 是一个 “破坏性” 方法,它会修改原数组。而 toSorted() 是一个 “非破坏性” 方法,它不会修改原数组。
示例 3:toSorted() 实现升序
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
function fn (a, b) {
return a - b;
}
const arr = [3, 9, 1, 12, 50, 21];
const result = arr.toSorted(fn);
console.log(arr);
console.log(result);
</script>
</body>
</html>运行结果如下。
[ 3, 9, 1, 12, 50, 21 ]
[ 1, 3, 9, 12, 21, 50 ]分析:
从结果可以看到,toSorted() 方法不会修改原数组,而是返回一个新数组。
示例 4:toSorted() 实现降序
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
function fn (a, b) {
return b - a;
}
const arr = [3, 9, 1, 12, 50, 21];
const result = arr.toSorted(fn);
console.log(arr);
console.log(result);
</script>
</body>
</html>运行结果如下。
[ 3, 9, 1, 12, 50, 21 ]
[ 50, 21, 12, 9, 3, 1 ]提示: 关于 toSorted() 的更详细用法,另请参阅:JavaScript 数组 toSorted() 方法。
