JavaScript对对象数组的两个字段排序

2023-10-16 17:28:27 浏览数 (1)

有个对象数组排序功能需求,需要对这个数组元素对象里头的两个字段进行判断。最直观想法是循环第一次判断第一个字段得到的新数组,再去循环这个新数组再判断第二个字段。这种方式逻辑直观,但是循环次数多,而且代码量也大。后来发现了sort()方法。

具体需求:

  1. 在线状态的排在前面,离线的在后面
  2. 在满足状态排序后databases字段长度按照小到大排序
代码语言:javascript复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript">
        var datas = [
            {
                "status": "离线",
                "children": [1,2,3]
            },
            {
                "status": "在线",
                "children": [1,2,3]
            },
            {
                "status": "离线",
                "children": [1,5,6,8]
            },
            {
                "status": "离线",
                "children": [2,3]
            },
            {
                "status": "在线",
                "children": [1]
            }
        ];


        function sortBy2Key(datas){
            datas.sort(function(a, b){
                // 状态:中文转换成数字比较,期望放在前面的使用小的数字。
                let statusA = a.status === '在线' ? 0 : 1;
                let statusB = b.status === '在线' ? 0 : 1;
                let lenA = a.children.length;
                let lenB = b.children.length;

                return statusA - statusB || lenA - lenB;
            });
        }

        sortBy2Key(datas);

        console.log(datas);
    </script>

</body>
</html>

代码运行结果

sort应该也能比较中文,应该是按照汉字编码数值来,具体还没有翻文档和测试下。但在本次案例种,还是得转换成期望比较顺序的数值。

参考文章

  1. 如何通过 JavaScript 中的两个字段对对象数组进行排序?

image.png

0 人点赞