摘要:項目需求是通過搜索關鍵字顯示符合搜索條件的用戶,搜索條件是用戶昵稱和用戶唯一號碼是一串數字,其中昵稱支持中文匹配和首字母拼音匹配。
項目需求是通過搜索關鍵字顯示符合搜索條件的用戶,搜索條件是用戶昵稱和用戶唯一號碼(是一串數字),其中昵稱支持中文匹配和首字母拼音匹配。 首先說說自己的想法: 1.既然要支持拼音搜索那么必須要一個能把中文轉化成拼音的東西(我是在網上找的大佬的代碼,一般像這種js都是比較大的,。。。沒有辦法字符太多) 2.搜索內容符合昵稱和唯一號需要分開判斷 開始: 假如本地數組是arr1 [ { name:"張三", id:0001 .... }, { name:"李四", id:0002 .... }, { name:"王五", id:0003 .... } ... ] 1.因為是使用本地搜索(這里是一個數組對象),并且要高亮必然要涉及到修改字段,這里提供一個深克隆數組的方法 var deepCopy = function(o){ if (o instanceof Array) { var n = []; for (var i = 0; i < o.length; ++i) { n[i] = deepCopy(o[i]); } return n; } else if (o instanceof Object) { var n = {} for (var i in o) { n[i] = deepCopy(o[i]); } return n; } else { return o; } } 2.需要使用轉拼音的js為 arr中每一項添加一個保存對應簡拼的字段,我這里叫spelling,我這里全部轉為大寫, 此時arr應該是這個樣子 [ { name:"張三", id:0001, spelling:"ZS" .... }, { name:"李四", id:0002, spelling:"LS" .... }, { name:"王五", id:0003, spelling:"WW" .... } ... ] 3.全局聲明一個數組 var arr1 = []用來保存匹配項 4.這里提供一個獲取匹配內容開始的位置的方法 只返回第一次匹配上的位置 var getStartIndex = function(val,inputStr){ var result var reg1=new RegExp(val,"ig"); reg1.lastIndex=0; if((result = reg1.exec(inputStr)) != null){ var lIndex=reg1.lastIndex-result[0].length; return lIndex } } 例子:在ABCD中匹配 a或者A getStartIndex("a","ABCD")//0;getStartIndex("aB","ABCD")//0;getStartIndex("c","ABCD")//2 5.利用正則匹配輸入內容和要比對的字段 var newArr = deepCopy (arr)//深拷貝本地數組 var reg = new RegExp(val.trim().toUpperCase())//val是你輸入的內容 newArr .map(function(item){ if(item.name.match(reg)||(item.id+"").match(reg)||(item.spelling).match(reg)){ //這里姓名id簡拼任何一項匹配成功就將此項加入到arr1中 var keyWord = (item.name).replace(/[s]+/g," ")//name字段去掉空格 var keyId = (item.id+"").replace(/[s]+/g," ");//id字段去掉空格 var rex = new RegExp(val.trim(),"i"); if(item.name.match(reg)){//中文匹配成功的情況直接將輸入內容替換成一個span標簽包住并給個紅色 item.name = keyWord.replace(rex,`${rex.exec(keyWord)}`) }else if((item.spelling+"").match(reg)){//簡拼匹配成功時 var index = getStartIndex(val.trim(),item.spelling)-1 for(let j = 0;j${showContent}`) }else if(item.id +"").match(reg)){ item.id = keyId.replace(rex, `${content}`) } arr1.push(item) } }) 至于為什么要先判斷匹配上用戶名在判斷匹配id 是因為產品的需求問題,之后拿到arr1就可以渲染頁面; 6.總結 我的代碼是封裝了一個方法的因為我的項目還有其他需求比較麻煩比如按產品規則排序什么還有其他比較多又雜,就不貼出我的代碼了,我寫這些主要是提供一個思路,我主要是想記錄兩個方法,一個是深拷貝數組和獲取匹配開始的index的方法。還有全拼+簡拼匹配什么的 以后有時間來實現吧 單純想了一下感覺很麻煩,另外轉拼音的js 網上找吧!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99207.html
摘要:到目前為止我們只實現了搜索功能,按更優的體驗來講,在搜索結果中,要優先把相連匹配的放在首位,如關鍵字,要把結果放到前面。 我們先看一下效果圖:showImg(https://segmentfault.com/img/remote/1460000015486183?w=199&h=107); 這是搜索關鍵字cfg時,會自動匹配到config方法 同樣,我們再看另一個例子 showImg(...
摘要:前綴部分必須完全匹配。搜索建議搜索建議功能,需要配合程序,在向中存入文檔時,就需要通過分詞等方式,指定搜索建議字段的內容。注意,高亮的結果在返回時單獨存放,并不是將數據做了改變。的官方文檔是最好的參考資料,介紹很全面。 模糊搜索 可以進行模糊搜索: GET job/type1/_search { query:{ fuzzy:{ title:{ v...
摘要:搜索請求用于與搜索文檔聚合相關的任何操作,還提供了在結果文檔上請求高亮的方法。將字段高光色添加到高亮構建器。稍后可以從中檢索高亮的文本片段。 Search API 搜索請求 SearchRequest用于與搜索文檔、聚合、suggestions相關的任何操作,還提供了在結果文檔上請求高亮的方法。 在最基本的表單中,我們可以向請求添加查詢: SearchRequest searchReq...
閱讀 2849·2021-08-20 09:37
閱讀 1606·2019-08-30 12:47
閱讀 1089·2019-08-29 13:27
閱讀 1684·2019-08-28 18:02
閱讀 749·2019-08-23 18:15
閱讀 3084·2019-08-23 16:51
閱讀 931·2019-08-23 14:13
閱讀 2125·2019-08-23 13:05