Oct1a

JS多种方式实现模糊查询

通常一些轻量级的数据,在前端进行过滤,会减少与后端交互,减少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 listQuery(list, keyWord) {
    return list.filter(v=>v.indexOf(keyWord) != -1)
  }

2. split 方法

  /**
   * 使用spilt方法实现模糊查询
   * @param  {Array}  list     进行查询的数组
   * @param  {String} keyWord  查询的关键词
   * @return {Array}           查询的结果
   */
  function listQuery(list, keyWord) {
    return list.filter(v=>v.split(keyWord).length >0)
  }

3. match 方法

  /**
   * 使用match方法实现模糊查询
   * @param  {Array}  list     进行查询的数组
   * @param  {String} keyWord  查询的关键词
   * @return {Array}           查询的结果
   */
  function listQuery(list, keyWord) {
    return list.filter(v=v.match(keyWord) != null)
  }

4. test方法(正则匹配)

 /**
   * 使用test方法实现模糊查询
   * @param  {Array}  list     原数组
   * @param  {String} keyWord  查询的关键词
   * @return {Array}           查询的结果
   */
  function listQuery(list, keyWord) {
    let reg =  new RegExp(keyWord);
    return list.filter(v=>reg.test(v))
  }

具体indexof,split,match,test方法的用法可以去参考官网查看学习,这里不做详解了www.w3school.com.cn/jsref/jsref…

总结:以上四种方法,除了match方法性能最差,其他三个方法在性能上差不多。不过test使用正则较灵活,推荐使用。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。