el-table 前端复合排序

实现效果

// 假设要排序的数组
[{ 'score', '升序'}, {  'age', '升序' } ]
// 此时要按照 score升序排,然后在 score升序排的基础上按照 age 升序排。
// 按照排序数组,以数据结果示例,score是升序,age是在score相同时进行升序
const res = [
  {
    score: 10,
    age: 1,
  },
  {
    score: 10,
    age: 2,
  },
  {
    score: 11,
    age: 1,
  },
];
1.html代码
<el-table :data="sortedData" @sort-change="handleSortChange">
  <el-table-column prop="score" label="分数" />
  <el-table-column prop="age" label="年龄" />
</el-table>
2.js 代码
<script setup lang="ts">
import {  ref, watch } from "vue";
// 排序数组
const sortsFilter: any = ref([]);
const handleSortChange = ({ prop, order }) => {
  const i = sortsFilter.value.findIndex((v: any) => v.prop === prop);
  if (i > -1) {
    sortsFilter.value[i].order = order;
  } else {
    sortsFilter.value.push({ order, prop });
  }
};
// 最终渲染 table 数据
const sortedData: any = ref([]);
// 监听排序数组,进行排序
watch(
  () => sortsFilter.value,
  () => {
    sortedData.value = [...tableData.value].sort(compositeSort);
  },
  {
    deep: true,
  }
);
// 排序方法
const compositeSort = (a, b) => {
  for (const { prop, order } of sortsFilter.value) {
    const modifier = order === "ascending" ? 1 : -1;
    if (a[prop] < b[prop]) return -1 * modifier;
    if (a[prop] > b[prop]) return 1 * modifier;
  }
  return 0;
};
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容