vue和js中實現(xiàn)模糊查詢方式
vue和js實現(xiàn)模糊查詢
先來看效果圖
這種數(shù)據(jù)量少的場景適用于前端實現(xiàn)模糊查詢
如何實現(xiàn)?
<template> <div class="container"> <div class="search-bar"> <el-input v-model="inputVal" placeholder="請輸入圖標名稱" suffix-icon="el-icon-search" clearable></el-input> </div> <div class="icon-contain"> <div class="icon-item" v-for="item in searchList" :key="item.icon"> <i class="icon-style" :class="item.icon"></i> <span class="icon-name">{{ item.name }}</span> </div> </div> </div> </template>
js部分
<script> export default { data () { return { inputVal: '', list: [], // 全部圖標列表 } }, created() { this.loadData() }, computed: { searchList () { .... } }, methods: { loadData() { // 初始化數(shù)據(jù) this.list = [ { icon: 'el-icon-delete', name: 'el-icon-delete' }, { icon: 'el-icon-setting', name: 'el-icon-setting' }, { icon: 'el-icon-user', name: 'el-icon-user' }, { icon: 'el-icon-star-off', name: 'el-icon-star-off' }, { icon: 'el-icon-picture-outline', name: 'el-icon-picture-outline' }, { icon: 'el-icon-s-custom', name: 'el-icon-s-custom' }, { icon: 'el-icon-edit', name: 'el-icon-edit' }, { icon: 'el-icon-folder-opened', name: 'el-icon-folder-opened' }, { icon: 'el-icon-chat-dot-round', name: 'el-icon-chat-dot-round' }, { icon: 'el-icon-upload', name: 'el-icon-upload' }, { icon: 'el-icon-message-solid', name: 'el-icon-message-solid' } ] }, } } </script>
我們用 computed 計算屬性來動態(tài)獲得圖標列表數(shù)據(jù)
想要達到的功能是:輸入框輸入內容,列表框能動態(tài)根據(jù)輸入值顯示輸入值相關的列表,即模糊查詢
方法1
使用 filter() 和 includes() 實現(xiàn)
computed: { searchList () { if (!this.inputVal) { return this.list } return this.list.filter(item => { return item.name.includes(this.inputVal) }) return data } },
方法2
使用 indexOf() 實現(xiàn),(涉及到英文字母的還是建議處理一下大小寫問題)
computed: { searchList () { if (!this.inputVal) { return this.list } const data = [] this.list.forEach(item => { if (item.name.toLowerCase().indexOf(this.inputVal.toLowerCase()) !== -1) { data.push(item) } }) return data } },
方法3
使用 test() 正則匹配實現(xiàn)
語法:RegExp.test(string) ,string 要檢測的字符串
該方法用于檢測一個字符串是否匹配某個模式,如果匹配返回 true ,否則返回 false
computed: { searchList () { if (!this.inputVal) { return this.list } const data = [] const reg = new RegExp(this.inputVal.toLowerCase()) this.list.forEach(item => { if (reg.test(item.name.toLowerCase())) { data.push(item) } }) return data } },
還有其他的方法,如 split()、match() 等
正則表達式實現(xiàn)模糊查詢
拿到一個新需求 就是在前端進行查詢一個數(shù)據(jù)
雖然一般這種行為都是在后端進行但是有時候就是會給你這個需求,這里因為數(shù)據(jù)量較小所以就進行簡單的遍歷查詢 沒有對數(shù)據(jù)進行排序后查詢 其實有想過二分查找之類的 但是這里數(shù)據(jù)量較小 就遍歷吧
? ? search() { ? ? ? console.log(this.searchInformation) ? ? ? this.listData = [] ? ? ? var str = ".*" + this.searchInformation + ".*" ? ? ? let reg = new RegExp(str) ? ? ? //這里通過邀請碼查詢 ? ? ? for(var i=0;i<this.wholeListData.length;i++){ ? ? ? ? if(reg.test(this.wholeListData[i].content)){ ? ? ? ? ? this.listData.push(this.wholeListData[i]) ? ? ? ? } ? ? ? } ? ? ? //通過附加信息查詢 ? ? ? for(var i=0;i<this.wholeListData.length;i++){ ? ? ? ? if(reg.test(this.wholeListData[i].addition)){ ? ? ? ? ? this.listData.push(this.wholeListData[i]) ? ? ? ? } ? ? ? } ? ? },
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用Vue實現(xiàn)調用接口加載頁面初始數(shù)據(jù)
今天小編就為大家分享一篇使用Vue實現(xiàn)調用接口加載頁面初始數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10el-table?樹形數(shù)據(jù)?tree-props?多層級使用避坑
本文主要介紹了el-table?樹形數(shù)據(jù)?tree-props?多層級使用避坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08vue pages 多入口項目 + chainWebpack 全局引用縮寫說明
這篇文章主要介紹了vue pages 多入口項目 + chainWebpack 全局引用縮寫說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Vue自定義過濾器格式化數(shù)字三位加一逗號實現(xiàn)代碼
這篇文章主要介紹了Vue自定義過濾器格式化數(shù)字三位加一逗號的實現(xiàn)代碼,需要的朋友可以參考下2018-03-03vuejs使用FormData實現(xiàn)ajax上傳圖片文件
本篇文章主要介紹了vuejs使用FormData實現(xiàn)ajax上傳圖片文件,具有一定的參考價值,有興趣的可以了解一下2017-08-08