对于模糊查询,一般都是传关键字给后端,由后端来做。但是有时候一些轻量级的列表前端来做可以减少ajax请求,在一定程度上提高用户体验。也能节省不少时间
1. indexof 方法
语法:stringObject.indexOf(searchvalue,fromindex)
参数:searchvalue 必需。规定需检索的字符串值。
fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是0到stringObject.length - 1。
如省略该参数,则将从字符串的首字符开始检索。
说明: 该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。如果没有找到,将返回 -1。
/** * 使用indexof方法实现模糊查询 * @param {Array} list 进行查询的数组 * @param {String} keyWord 查询的关键词 * @return {Array} 查询的结果 */ function fuzzyQuery(list, keyWord) { var arr = []; for (var i = 0; i < list.length; i++) { if (list[i].indexOf(keyWord) >= 0) { arr.push(list[i]); } } return arr; }
2. split 方法
/** * 使用spilt方法实现模糊查询 * @param {Array} list 进行查询的数组 * @param {String} keyWord 查询的关键词 * @return {Array} 查询的结果 */ function fuzzyQuery(list, keyWord) { var arr = []; for (var i = 0; i < list.length; i++) { if (list[i].split(keyWord).length > 1) { arr.push(list[i]); } } return arr; }
3. match 方法
/** * 使用match方法实现模糊查询 * @param {Array} list 进行查询的数组 * @param {String} keyWord 查询的关键词 * @return {Array} 查询的结果 */ function fuzzyQuery(list, keyWord) { var arr = []; for (var i = 0; i < list.length; i++) { if (list[i].match(keyWord) != null) { arr.push(list[i]); } } return arr; }
4. test方法(正则匹配)
/** * 使用test方法实现模糊查询 * @param {Array} list 原数组 * @param {String} keyWord 查询的关键词 * @return {Array} 查询的结果 */ function fuzzyQuery(list, keyWord) { var reg = new RegExp(keyWord); var arr = []; for (var i = 0; i < list.length; i++) { if (reg.test(list[i])) { arr.push(list[i]); } } return arr; }
具体indexof,split,match,test方法的用法可以去参考官网查看学习,这里不做详解了www.w3school.com.cn/jsref/jsref…
总结:以上四种方法,除了match方法性能最差,其他三个方法在性能上差不多。不过test使用正则较灵活,推荐使用。