php、java与js 数组的模糊匹配查询代码实现
我们知道数据库中模糊匹配用like,或者全文检索,那么有时间数据量比较小,不想建个数据表,怎么办,可以用数组
那么数组如何实现模糊匹配查询的
先看php的
$list = array(); // 匹配后的结果 $arr = array("abcd","abef","efgh"); $search_str = "ab"; // 搜索的字符串 foreach($arr as $key=>$val ){ if (strstr( $val , $search_str ) !== false ){ array_push($list, $val); } } $list 即为模糊匹配后的结果: $list = array("abcd","abef");那么js中如何实现呢,其实大同小异
var list = ["中国", "美国", "英国 "]; var len = list.length; var arr = []; var reg = new RegExp("关键字或字符串"); for(var i=0;i<len;i++){ if(list[i].match(reg)){ arr.push(list[i]); console.log(arr); } }或者
var list = ["中国", "美国", "英国 "]; var arr = []; for(var i=0;i<list.length;i++){ //如果字符串中不包含目标字符会返回-1 if(list[i].indexOf("关键字或字符串")>=0){ arr.push(list[i]); } }
es6中还可以这样(注意,现代浏览器支持)
var arr = [ {id: "1", en: "Afghanistan", cn: "阿富汗", code: "93"}, {id: "2", en: "Iraq", cn: "伊拉克", code: "964"}, {id: "3", en: "Qatar", cn: "卡塔尔", code: "974"} ]; function query(arr, q) { return arr.filter(v => Object.values(v).some(v => new RegExp(q + '').test(v)) ) }
那么java中呢,差不多都一样
public List search(String name,List list){ List results = new ArrayList(); Pattern pattern = Pattern.compile(name); for(int i=0; i < list.size(); i++){ Matcher matcher = pattern.matcher(((Employee)list.get(i)).getName()); if(matcher.find()){ results.add(list.get(i)); } } return results; }今天就到着了,数据量大了不适合了
网友评论0