JS实现多条件搜索函数

简介: JS封装的多条件搜索

一开始使用的是includes函数,只能进行简单的模糊 搜索,并不能执行多条件以及精准搜索,较为简陋,后续更改为filter来进行多条件搜索

const filters = {
    name_search: $("#search").val(),
    title_search: $(".search").val(),
    id_company: $(".companys").val(),
    tradeid_industry: $(".Selection_box .Industry").val(),
    title_goods: $(".Details_text").val(),
    name_person: $("#office_Person").val(),
    company_office: $("#office_name").val(),
    title_simple: $("#office_simple").val(),
    cattitle_sort: $(".search_content .office_sort").val(),
  };

  // 过滤空值字段
  Object.keys(filters).forEach((key) => {
    if (!filters[key] || filters[key] == 0) delete filters[key];
  });

通过将所有数值放入条件内,因为后续使用的是通过键值名来与数据内对应的数据进行比对,有多个后台接口进行对应,所以数据名称会重复,若在这里进行相同名字的声明则会使数据相互覆盖,造成错误,因此使用这样的命名方式来区分

const newArr = performFilter(data, filters);

  // 处理筛选结果
  if (newArr.length === 0) {
    $(".Notice")
      .html('<img src="img/none.png" alt="" class="none_pic">')
      .css("display", "flex");
    $(".Notice_nav, .Notice_footer").hide();
  } else {
    render(newArr);
    $(".Notice_nav, .Notice_footer").show();
    $(".Notice").show();
    data = newArr;
    render(data);
  }

随后调用函数,并处理无数据的结果

function performFilter(items, filters) {
  return items.filter((item) => {
    return Object.entries(filters).every(([key, filterValue]) => {
      // 不再通过 key.split('_') 来拆解字段名
      const fieldName = key.split("_")[0];

      // 如果 filterValue 为空,跳过筛选
      if (!filterValue) return true;

      // 处理筛选
      if (item[fieldName] === undefined) {
        // 如果字段不存在于 item 中,跳过这个条件
        return true;
      }

      // 对于字符串的匹配,使用 includes 进行模糊匹配
      if (typeof item[fieldName] === "string") {
        // 使用 includes 来判断是否包含输入的部分内容
        return item[fieldName]
          .toLowerCase()
          .includes(filterValue.toLowerCase());
      }

      // 对于其他类型的字段,进行直接比较
      return item[fieldName] == filterValue;
    });
  });
}

首先循环遍历对象的每一个键值对,并返回出来结果,因为我前面说的,为了防止相互覆盖,但又需要其名字来作为检索的依据,因此用下划线分割,同时将前面我需要的部分截取下来并赋值给一个变量,判断一下空点搜索的可能性,随后进行判断,当为字符串的时候进行模糊搜索,为数字的时候进行精确比对,将值返回给上级,再通过循环遍历的每一个键值对中为true的生成一个新数组返回到最外面赋值给newArr,进行渲染。

相关文章
|
2月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
3月前
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
98 32
|
2月前
|
JavaScript 前端开发 Java
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
柯里化是一种强大的函数式编程技术,它通过将函数分解为单参数形式,实现了灵活性与可复用性的统一。无论是参数复用、延迟执行,还是函数组合,柯里化都为现代编程提供了极大的便利。 从 Redux 的选择器优化到复杂的数据流处理,再到深度嵌套的函数优化,柯里化在实际开发中展现出了非凡的价值。如果你希望编写更简洁、更优雅的代码,柯里化无疑是一个值得深入学习和实践的工具。从简单的实现到复杂的应用,希望这篇博客能为你揭开柯里化的奥秘,助力你的开发之旅! 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
6月前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
81 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
6月前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
7月前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
7月前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
7月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
178 1
|
7月前
|
JavaScript 前端开发
js教程——函数
js教程——函数
107 4
|
7月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
71 5