JavaScript 数组排序

在 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() 方法

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号