开始前先回顾一下sort排序用法:
定义一串数组arr,使用sort排序,会收到前后两个数据项设置两个参数a,b。
注意:a-b 是升序
b-a 是降序
a-b升序:
<script>
let arr = [12,11,2,5,76,33]
arr.sort((a,b)=>{
return a-b
})
console.log(arr)
</script>
b-a降序:
<script>
let arr = [12,11,2,5,76,33]
arr.sort((a,b)=>{
return b-a
})
console.log(arr)
</script>
Vue列表排序代码实现:
<body>
<div id="root">
<!--遍历数组-->
<h2>人员列表</h2>
<input type="text" placeholder="请输入名字" v-model="keyWord">
<button @click="sortType = 2">年龄升序</button>
<button @click="sortType = 1">年龄降序</button>
<button @click="sortType = 0">原顺序</button>
<ul>
<li v-for="(p,index) in filPersons":key="p.id">
{{p.name}}--{{p.age}}--{{p.sex}}
</li>
</ul>
</div>
<script>
new Vue({
el:'#root',
data:{
keyWord:'',
sortType:0,
persons:[
{id:'001',name:'马冬梅',age:'28',sex:'女'},
{id:'002',name:'周冬雨',age:'12',sex:'女'},
{id:'003',name:'周杰伦',age:'42',sex:'男'},
{id:'004',name:'温兆伦',age:'49',sex:'男'},
],
},
computed:{
//列表过滤
filPersons(){
const arr = this.persons.filter((p)=>{
return p.name.indexOf(this.keyWord)!==-1
})
//利用sortType0,1,2的变换,判断是否排序
if (this.sortType){
arr.sort((p1,p2)=>{
return this.sortType === 1 ? p2.age-p1.age :p1.age-p2.age
})
}
return arr
}
}
})
</script>
</body>
效果: