Vue 排序

在vue用sort()函数进行排序时,当数字位数不相同时,排序会有bug,这是个通病,在其他编程语言里也有同样的问题,我们只需要自己再定义一个方法即可。

单数组排序:

<div id="app">
	<ul>
		<li v-for="item in soreItem">{{item}}</li>
	</ul>
</div>

<script>
	var app = new Vue({
		el:"#app",
		data:{
			items: [1996,03,25,22]
		},
		computed:{
			soreItem(){
			    return this.items.sort()
    // 1996 22 25 3 此处排序有bug ,当位数不相同时,只会比较第一位,并不是从小到大的顺序排序
			}
		}
	})
</script>

改进后:

<div id="app">
	<ul>
		<li v-for="item in soreItem">{{item}}</li>
	</ul>
</div>

<script>
	var app = new Vue({
		el:"#app",
		data:{
			items: [1996,03,25,22]
		},
		computed:{
			soreItem(){
				return this.items.sort(function(n,m){
					return n - m
				})
            // 3 22 25 1996 这样排序就正确了
			}
		}
	})
</script>

我们还可以在后面跟上.reverse(),进行倒序排序

soreItem(){
	return this.items.sort(function(n,m){
		return n - m
	}).reverse();
}

数组对象排序:

 

<script>
		var app = new Vue({
			el:"#app",
			data:{
				students:[
					{name:"小明",score:68},
					{name:"小红",score:84},
					{name:"小伟",score:59},
					{name:"小付",score:100}
				]
			},
			computed:{
				soreStudents(){
				  	return sortByKey(this.students,'score');
				}
			}
		})

		//数组对象方法排序:
		function sortByKey(array,key){
		    return array.sort(function(a,b){
		      var x=a[key];
		      var y=b[key];
		      return ((x<y)?-1:((x>y)?1:0));
		   });
		}
	</script>

html代码

<li v-for="(student,index) in soreStudents">
	{{index+1}}.姓名:{{student.name}},成绩{{student.score}}
</li>

 

要实现Vue排序功能,有几种不同的方法,以下是其中两种: 1. 使用原生JavaScript的sort()方法:可以在Vue的computed属性中使用sort()方法,对需要排序的数组进行排序。例如: ``` <template> <div> <ul> <li v-for="item in sortedItems">{{ item }}</li> </ul> </div> </template> <script> export default { data() { return { items: [3, 1, 4, 2] } }, computed: { sortedItems() { return this.items.sort((a, b) => a - b) } } } </script> ``` 2. 使用第三方插件:可以使用一些第三方插件,如Lodash、Vue-Filterable等,实现更复杂的排序功能。例如,使用Vue-Filterable插件,可以实现按照多个属性进行排序: ``` <template> <div> <table> <thead> <tr> <th v-for="column in columns" @click="sortBy(column)">{{ column }}</th> </tr> </thead> <tbody> <tr v-for="item in filteredItems"> <td>{{ item.name }}</td> <td>{{ item.age }}</td> <td>{{ item.gender }}</td> </tr> </tbody> </table> </div> </template> <script> import VueFilterable from 'vue-filterable' export default { data() { return { items: [ { name: 'Alice', age: 25, gender: 'female' }, { name: 'Bob', age: 30, gender: 'male' }, { name: 'Charlie', age: 20, gender: 'male' } ], columns: ['name', 'age', 'gender'], sortColumn: 'name', sortDirection: 'asc' } }, computed: { filteredItems() { return VueFilterable.filter(this.items, this.search, { sortColumn: this.sortColumn, sortDirection: this.sortDirection }) } }, methods: { sortBy(column) { if (column === this.sortColumn) { this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc' } else { this.sortColumn = column this.sortDirection = 'asc' } } } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值