通过filter和sort来实现,具体示例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vue@2.6.1-dev.js"></script>
</head>
<body>
<div id="test2">
<h2>模糊查询:</h2>
<input type="text" v-model="searchName" class="test1">
<ul class="test1">
<!-- filterPersons用到过滤运算 computed-->
<li v-for="(item ,index) in filterPersons" :key="index">{{item.name}}----{{item.age}}</li>
</ul>
<h2>排序:</h2>
<button @click="setOrderType(1)">年龄升序</button>
<button @click="setOrderType(2)">年龄降序</button>
<button @click="setOrderType(0)">年龄原序</button>
</div>
<script type="text/javascript">
vm = new Vue ({
el:'#test2',
data:{
persons:[
{name:'Bob',age:'21'},
{name:'Jack',age:'20'},
{name:'Alex',age:'19'},
{name:'Rose',age:'23'},
{name:'Smith',age:'20'},
],
searchName:'',
orderType: 0,//0代表原序,1代表升序,2代表降序
},
computed:{
filterPersons(){
//取出相关的数据,
const {searchName,persons,orderType} = this;
//最终需要显示的数据
let fPersons;
// 匹配到满足条件的记录该下标,否则下标为-1;然后对person是进行过滤,过滤掉下标为-1的元素。
fPersons = persons.filter(item => item.name.indexOf(searchName)>=0);
//排序
if(orderType!=0){
fPersons.sort(function(item1,item2){//如果返回负数,则item1在前;反之item2在前
//1代表升序,2代表降序
if(orderType==1){
return item1.age - item2.age;
}else{
return item2.age - item1.age;
}
})
}
return fPersons;
}
},
methods:{
//通过按钮点击事件进行改变参数index对原数据进行排序过滤
setOrderType(index){
this.orderType = index;
}
}
})
</script>
</body>
</html>
网友回复