Vue 3 中列表排序:单字段与多字段排序实现方案
创作时间:
作者:
@小白创作中心
Vue 3 中列表排序:单字段与多字段排序实现方案
引用
CSDN
1.
https://blog.csdn.net/weixin_44171297/article/details/145711423
在前端开发中,对数据列表进行排序是一个常见的需求。在 Vue 3 里,我们可以方便地实现根据单个字段或者多个字段对列表进行排序。本文将深入探讨如何在 Vue 3 中完成这些排序操作,涵盖组合式 API 和选项式 API 两种实现方式,并详细解释其中的原理。
单字段排序
原理
单字段排序的核心是使用 JavaScript 数组的 sort 方法。sort 方法接受一个比较函数作为参数,通过比较函数的返回值来确定元素的顺序。比较函数接收两个参数,通常表示为 a 和 b,如果返回值小于 0,则 a 排在 b 前面;如果返回值大于 0,则 a 排在 b 后面;如果返回值等于 0,则元素顺序不变。
组合式 API 实现
<template>
<div>
<button @click="sortByAgeAsc">按年龄升序排序</button>
<button @click="sortByAgeDesc">按年龄降序排序</button>
<ul>
<li v-for="person in sortedList" :key="person.id">
{{ person.name }} - {{ person.age }}
</li>
</ul>
</div>
</template>
<script setup>
import { ref } from 'vue';
const list = ref([
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 20 },
{ id: 3, name: 'Charlie', age: 30 }
]);
const sortedList = ref([...list.value]);
const sortByAgeAsc = () => {
sortedList.value = [...list.value].sort((a, b) => a.age - b.age);
};
const sortByAgeDesc = () => {
sortedList.value = [...list.value].sort((a, b) => b.age - a.age);
};
</script>
代码解释:
- 数据定义:使用
ref创建响应式数据list存储原始数据,sortedList存储排序后的数据。 - 排序函数:
sortByAgeAsc函数通过a.age - b.age实现年龄升序排序,sortByAgeDesc函数通过b.age - a.age实现年龄降序排序。
选项式 API 实现
<template>
<div>
<button @click="sortByAgeAsc">按年龄升序排序</button>
<button @click="sortByAgeDesc">按年龄降序排序</button>
<ul>
<li v-for="person in sortedList" :key="person.id">
{{ person.name }} - {{ person.age }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
list: [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 20 },
{ id: 3, name: 'Charlie', age: 30 }
],
sortedList: []
};
},
created() {
this.sortedList = [...this.list];
},
methods: {
sortByAgeAsc() {
this.sortedList = [...this.list].sort((a, b) => a.age - b.age);
},
sortByAgeDesc() {
this.sortedList = [...this.list].sort((a, b) => b.age - a.age);
}
}
};
</script>
代码解释:
- 数据定义:在
data选项中定义list和sortedList。 - 生命周期钩子:在
created钩子中初始化sortedList。 - 方法定义:
sortByAgeAsc和sortByAgeDesc方法实现排序逻辑。
多字段排序
原理
多字段排序是在单字段排序的基础上,当第一个字段相等时,再根据第二个字段进行排序,以此类推。通过在比较函数中添加多个比较条件来实现。
组合式 API 实现
<template>
<div>
<button @click="sortList">按年龄和名字排序</button>
<ul>
<li v-for="person in sortedList" :key="person.id">
{{ person.name }} - {{ person.age }}
</li>
</ul>
</div>
</template>
<script setup>
import { ref } from 'vue';
const list = ref([
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 25 },
{ id: 3, name: 'Charlie', age: 30 },
{ id: 4, name: 'Alice', age: 20 }
]);
const sortedList = ref([...list.value]);
const sortList = () => {
sortedList.value = [...list.value].sort((a, b) => {
if (a.age !== b.age) {
return a.age - b.age;
}
return a.name.localeCompare(b.name);
});
};
</script>
代码解释:
- 数据定义:同单字段排序。
- 排序函数:先比较
age字段,如果age不同则按age升序排序;如果age相同,则使用localeCompare方法按name字段的字母顺序排序。
选项式 API 实现
<template>
<div>
<button @click="sortList">按年龄和名字排序</button>
<ul>
<li v-for="person in sortedList" :key="person.id">
{{ person.name }} - {{ person.age }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
list: [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 25 },
{ id: 3, name: 'Charlie', age: 30 },
{ id: 4, name: 'Alice', age: 20 }
],
sortedList: []
};
},
created() {
this.sortedList = [...this.list];
},
methods: {
sortList() {
this.sortedList = [...this.list].sort((a, b) => {
if (a.age !== b.age) {
return a.age - b.age;
}
return a.name.localeCompare(b.name);
});
}
}
};
</script>
代码解释:
- 数据定义:在
data选项中定义list和sortedList。 - 生命周期钩子:在
created钩子中初始化sortedList。 - 方法定义:
sortList方法实现多字段排序逻辑。
总结
在 Vue 3 中进行列表排序,无论是单字段还是多字段排序,核心都是利用 JavaScript 数组的 sort 方法。通过组合式 API 或选项式 API,我们可以根据项目需求选择合适的实现方式。组合式 API 更适合处理复杂逻辑和复用代码,而选项式 API 则更符合传统 Vue 开发者的习惯。掌握这些排序方法,能让我们在处理数据展示时更加得心应手。
热门推荐
环氧树脂的特点与广泛应用:生活中的隐形英雄与创意工具
抑郁症面相特征:从眼神到皮肤的四大观察要点
消弧线圈与阻尼电阻的详细解析
实习单位鉴定意见怎么写才合适?
SWOT自我分析是什么
崇祯皇帝的困境:明朝灭亡的责任与无力回天的遗憾
中医对世界最大的贡献就是发现了青蒿素
时代背景下的态度与能力:成功的多维度考量
如何理解股票市盈率的含义和作用?股票市盈率的变化对投资的影响有哪些?
中国十大桃花景区:从西藏高原到江南水乡的春日盛宴
HR必读:如何用高效识人法破解面试难题?这6本工具书+3门课助你精准识人
辅酶Q10能预防老年痴呆吗?日常饮食能补充吗?(附视频)
二维码钓鱼攻击的兴起:诈骗者如何利用二维码及如何防范
性能测试工具K6:脚本编写、执行和输出详解
醉月悠悠,漱石休休,水可陶情,花可融愁。
西晋文人典故二则 1.枕流漱石
梦境分析:狗的象征意义与周公解梦
这么吃梨,整个秋冬不咳嗽,还能降血压
法定增值税总价:了解其含义及计算方法
安全疏散空间| 架空层、骑楼、外廊、专用通道
如何获得ESG认证?
福岛核废水入海对全球环境可持续性的影响
AI搜索时代,关键词优化的“变”与“解”

胀气贴的原理是什么
哪些理财方式可以抵御通胀?这些理财方式的抗通胀效果如何评估?
什么样的产品能够有效抗通胀?抗通胀产品的选择标准是什么?
如何写自我鉴定
清朝宗室爵位:等级森严的封建荣誉体系
看证!一定要看证!关于选择参加校外培训那些事,您务必要知道!
如何妥善保存并利用高清晰诈骗证据图片依法维权