【排序】js简单实现前端数组排序,多字段数组对象排序,字符串排序,数字排序等

文章描述了一个使用Vue.js实现的数组对象排序功能,通过多字段(ks、child_ks和xz)进行排序,并展示了如何在Vue组件中定义和调用排序方法。
摘要由CSDN通过智能技术生成

数组对象排序(多字段排序)

排序前:
在这里插入图片描述
排序后:
在这里插入图片描述

data() {
            return {
                list: [{
                        ks: '外科',
                        child_ks: '泌尿外科',
                        xz: '外科一组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '中医科',
                        child_ks: '中医男科',
                        xz: '外科一组',
                        doctor: '小红',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '中医科',
                        child_ks: '中医男科',
                        xz: '外科一组',
                        doctor: '小张',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '外科',
                        child_ks: '泌尿外科',
                        xz: '外科二组',
                        doctor: '小李',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '外科',
                        child_ks: '泌尿外科',
                        xz: '外科二组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '中医科',
                        child_ks: '中医妇科',
                        xz: '外科一组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '外科',
                        child_ks: '泌尿外科',
                        xz: '外科二组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '中医科',
                        child_ks: '中医妇科',
                        xz: '外科二组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                ]
            }
        },
methods: {
            // 多字段排序
            mysort(a, b) {
                if (a.ks !== b.ks) return a.ks < b.ks ? -1 : 1
                else if (a.child_ks !== b.child_ks) return a.child_ks < b.child_ks ? -1 : 1
                else if (a.xz !== b.xz) return a.xz < b.xz ? -1 : 1
            },
            test() {
                this.list.sort(this.mysort)
                console.log(this.list)
            }
        }
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <!-- 公共css文件 -->
    <link rel="stylesheet" href="/statics/css/common/common.css">
    <!-- 公共js文件 -->
    <script type="text/javascript" src="/statics/vue_element/common.js"></script>
    <!-- vue方面文件 -->
    <script src="/statics/vue_element/vue.js"></script>
    <script src="/statics/vue_element/element.js"></script>
    <link rel="stylesheet" href="/statics/vue_element/element.css">
    <script src="/statics/vue_element/axios.js"></script>
    <title>测试页</title>
</head>

<body>
    <div id="app" style="padding:10px;">
        <!-- 数组对象排序 -->
        <el-button type="primary" @click="test">数组对象排序</el-button>
        <div v-for="(item,index) in list" :key="index" style="font-size:16px;">{{item}}</div>

        <!-- 数组排序 -->
        <el-button type="primary" @click="numberPaixu" style="margin-top: 20px;">数组排序正</el-button>
        <el-button type="primary" @click="numberPaixu2">数组排序反</el-button>
        <div style="font-size:16px;margin-bottom:20px;">{{list2}}</div>

        <!-- 字符串排序 -->
        <el-button type="primary" @click="stringPaixu">字符串排序</el-button>
        <div style="font-size:16px;">{{list3}}</div>
    </div>
</body>
<script type="text/javascript">
    let v = new Vue({
        el: '#app',
        data() {
            return {
                list2: [8, 7, 9, 4, 3, 1, 2, 5, 6],
                list3: ['b','s','c','w','a','d','f'],
                list: [{
                        ks: '外科',
                        child_ks: '泌尿外科',
                        xz: '外科一组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '中医科',
                        child_ks: '中医男科',
                        xz: '外科一组',
                        doctor: '小红',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '中医科',
                        child_ks: '中医男科',
                        xz: '外科一组',
                        doctor: '小张',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '外科',
                        child_ks: '泌尿外科',
                        xz: '外科二组',
                        doctor: '小李',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '外科',
                        child_ks: '泌尿外科',
                        xz: '外科二组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '中医科',
                        child_ks: '中医妇科',
                        xz: '外科一组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '外科',
                        child_ks: '泌尿外科',
                        xz: '外科二组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                    {
                        ks: '中医科',
                        child_ks: '中医妇科',
                        xz: '外科二组',
                        doctor: '小明',
                        num: 18,
                        num2: 19,
                        num3: 20
                    },
                ]
            }
        },
        methods: {
            // 多字段排序
            mysort(a, b) {
                if (a.ks !== b.ks) return a.ks < b.ks ? -1 : 1
                else if (a.child_ks !== b.child_ks) return a.child_ks < b.child_ks ? -1 : 1
                else if (a.xz !== b.xz) return a.xz < b.xz ? -1 : 1
            },
            // 数组对象排序
            test() {
                this.list.sort(this.mysort)
                console.log(this.list)
            },
            // 数组排序(正)
            mysort2(a, b) {
                return a - b;
            },
            // 数组排序(反)
            mysort22(a, b) {
                return b - a;
            },
            // 数组排序
            numberPaixu() {
                this.list2.sort(this.mysort2)
            },
            // 数组排序
            numberPaixu2() {
                this.list2.sort(this.mysort22)
            },
            // 字符串排序
            stringPaixu(){
                this.list3.sort()
            }
        }
    })
</script>
<style scoped>

</style>

</html>

数组对象根据某一个字段排序

// 排序
compare(property) {
  return function (a, b) {
    var value1 = a[property];
    var value2 = b[property];
    return value1 - value2;
  }
}
//打印看结果
console.log(newArray.sort(this.compare("value")))

多条件排序

methods: {
            paixu() {
                this.data.sort(this.mysort);
            },
            // 多字段排序
            mysort(a, b) {
                if (a.ks_id_text !== b.ks_id_text) {
                	 // 过滤字段为null或者undefined的情况
                    if (a.ks_id_text !== null && a.ks_id_text !== undefined) {
                        return a.ks_id_text < b.ks_id_text ? -1 : 1;
                    } else {
                        return -1;
                    }
                } else if (a.child_ks_id_text !== b.child_ks_id_text) {
                    if (a.child_ks_id_text !== null && a.child_ks_id_text !== undefined) {
                        return a.child_ks_id_text < b.child_ks_id_text ? -1 : 1;
                    } else {
                        return -1;
                    }
                } else if (a.group_name !== b.group_name) {
                    if (a.group_name !== null && a.group_name !== undefined) {
                        return a.group_name < b.group_name ? -1 : 1;
                    } else {
                        return -1;
                    }
                }
            },
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

接口写好了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值