<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script type="text/javascript" src="../js/vue.js"></script> <title>列表排序</title> </head> <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="index"> {{p.name}}--{{p.age}}--{{p.sex}} </li> </ul> </div> <script> //用computed实现 const vm = new Vue({ el: "#root", data: { keyword: "", sortType:0,//0代表原顺序,1代表降序,2代表升序 persons: [ { id: "001", name: "马冬梅", age: 30, sex: "女" }, { id: "002", name: "周冬雨", age: 33, sex: "女" }, { id: "003", name: "周杰伦", age: 28, sex: "男" }, { id: "004", name: "温兆伦", age: 21, sex: "男" }, ], }, computed:{ filPersons(){ const arr= this.persons.filter((p) => { return p.name.indexOf(this.keyword) !== -1; }) if (this.sortType!==0) { arr.sort((p1,p2)=>{ return this.sortType===1?p2.age-p1.age:p1.age-p2.age; }) } return arr; } } }) </script> </body> </html>