<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>列表排序</title> <script src="../js/vue.js"></script> <style> table,tr,td,th{ border:1px solid black; } </style> </head> <body> <div id="app"> <h1>{{msg}}</h1> <input type="text" placeholder="输入关键字搜索" v-model="keyword"><br> <button @click="type = 1">按照名字升序</button><br> <button @click="type = 2">按照名字降序</button><br> <button @click="type = 0">按照名字原始顺序</button><br> <table> <tr> <th>序号</th> <th>姓名</th> <th>邮箱</th> <th>操作</th> </tr> <tr v-for="(vip, index) in filterVips" :key="vip.id"> <td>{{index+1}}</td> <td>{{vip.name}}</td> <td>{{vip.email}}</td> <td><input type="checkbox"></td> </tr> </table> </div> <script> const vm = new Vue({ el : '#app', 40. data : { msg : '列表排序', 42. vips : [ {id:'100',name:'jack',email:'jack@123.com'}, 44. {id:'200',name:'lucy',email:'lucy@123.com'}, 45. {id:'300',name:'james',email:'james@123.com'}, 46. {id:'400',name:'lilei',email:'lilei@123.com'}, 47. ], 48. keyword : '', 49. type : 0 }, 51. computed : { filterVips(){ // 筛选 let arr = this.vips.filter((vip) => { return vip.name.indexOf(this.keyword) >= 0 }) // 根据排序类型进行排序 if(this.type){ arr.sort((v1, v2) => { console.log('@') return this.type == 1 ? v1.name.localeCompare(v2.name) : v2.name.localeCompare(v1.name) }) } // 返回 return arr } } }) </script> </body></html>