4种方法
测试数据:
var list1 = [
{
name: "bbAhhhaia",
other: "akka"
},
{
name: "哈哈ad",
other: "cai"
},
{
name: "js",
other: "aa"
}
]
fuzzyQuery(list1, "a");
1 indexOf
从头到尾地检索字符串 item.name,看它是否含有子串 keyWord。
如果找到一个 keyWord,则返回 keyWord 的第一次出现的位置。如果没有找到,将返回 -1。
/**
* @param {Array} list 进行查询的数组
* @param {String} keyWord 查询的关键词
* @return {Array} arr 查询的结果
*/
function fuzzyQuery(list, keyWord) {
var arr = list.filter(item => {
return item.name.indexOf(keyWord) >= 0
});
return arr
}
2 split
通过 keyWord 将 item.name 分割成子串并返回子串数组。返回的数组中的字串不包括 item.name 自身。
如果 item.name 中不存在 keyWord,将返回一个只包含 item.name 的数组。
故可以根据返回数组的长度来判断是否存在子字符串 keyWord
function fuzzyQuery(list, keyWord) {
var arr = list.filter(item => {
return item.name.split(keyWord).length > 1
});
return arr
}
3 正则表达式test
function fuzzyQuery(list, keyWord) {
var arr = list.filter(item => {
var reg = new RegExp(keyWord, "gi");
return reg.test(item.name)
});
return arr
}
4 正则表达式match
function fuzzyQuery(list, keyWord) {
var arr = list.filter(item => {
var reg = new RegExp(keyWord, "gi");
return item.name.match(reg)
});
return arr
}
总结
match性能最差, test功能会比较强大,代码也更加简洁。比如:忽略大小写