1.以前做專案都是用原生的indexOf方法去處理簡單模糊檢索功能,后面ES6出來用includes方法,其實效果都是一樣的,只是includes方法回傳的是布林值,如果涉及到字母大小寫檢索的話,那就有問題了,比如
// indexOf()
let str = 'AbcdEFG';
str.indexOf('bc');//1
str.indexOf('bcD');//-1
// includes()
str.includes('bc');//true
str.includes('bcD');//false
通過以上輸出結果可以得出結論,我覺得應該會有人在作業上會特地去將用戶輸入的字母通過toLowerCase() 和toUpperCase()方法轉換然后再去檢索判斷吧,最起碼新手時我是這樣過來的,
2.下面我們來看下match方法吧
match(searchvalue||regexp) 這方法引數只有一個,要么是檢索的字串,要么是RegExp物件,如果只是傳 入字串去檢索的話,那作用跟上面兩個方法效果是一樣的,所以我們需要用RegExp物件去檢索
//還是繼續使用上面的str變數,這次我們在RegExp物件加上 /i 忽略大小寫功能
// 正常檢索
str.match(new RegExp('Abc', 'i'));//["Abc", index: 0, input: "AbcdEFG", groups: undefined]
// 忽略大小寫檢索
str.match(new RegExp('ABC', 'i'));//["Abc", index: 0, input: "AbcdEFG", groups: undefined]
// 無法正常檢索
str.match(new RegExp('ABCABC', 'i'));//null
通過以上match方法檢索出來的結果我們可以通過陣列的長度或者判斷是否是陣列來判斷是否有檢索成功,可以看下面demo
const arr = [{name:'測驗_test'},{name:'后_端sTE'},{name:'前端Stb'},{name:'運維pp_k'},{name:'_安卓AteSTdn'},{name:'蘋果Apple'}]
let value = 'Te';
let res = arr.filter(item => {
let len = item.name.match(new RegExp(value,'i'));
return len&&len.length&&item;
})
console.log(res);//[{name: "測驗_test"},{name: "后_端sTE"},{name: "_安卓AteSTdn"}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/197225.html
標籤:其他
上一篇:cgb2007-京淘day02
