html:
<div id="demo">
<input type="text" v-model="searchName">
<ul>
<li v-for="(p, index) in filterPersons" :key="index">
{{index}}---{{p.name}}---{{p.age}}
</li>
</ul>
<div>
<button @click="setOrderType(1)">年龄升序</button>
<button @click="setOrderType(2)">年龄降序</button>
<button @click="setOrderType(0)">原本顺序</button>
</div>
</div>
new Vue({
el: '#demo',
data: {
searchName: '',
orderType: 0,// 0代表原本、1代表升序、2代表降序
persons: [
{name: 'Tom', age:18},
{name: 'Jack', age:16},
{name: 'Bob', age:19},
{name: 'Rose', age:17}
]
},
computed: {
filterPersons(){
// 取出相关的数据
const {searchName, persons, orderType} = this;
// 最终需要显示的数组
let fPersons;
// 对persons进行过滤
fPersons = persons.filter(p => p.name.indexOf(searchName)!==-1);
// 排序
if(orderType!==0){
fPersons.sort(function(p1, p2){
// 1代表升序、2代表降序
if(orderType===2){
// 如果返回负数则p1在前,返回正数则p2在前
return p2.age - p1.age;
}else{
return p1.age - p2.age;
}
})
}
return fPersons;
}
},
methods: {
setOrderType(orderType){
this.orderType = orderType;
}
}
})
网友评论