【前端】纯前端实现筛选搜索过滤

404 阅读1分钟

1.场景一,多选项单选

async search () {
      await this.getRequestCaiLiaoDetail()
      const values = Object.values(this.queryForm)
      // 参数都为空
      if (values.every((item) => !item)) {
        this.caiLiaoTable = this.resultClone
        return
      }
      // 去除为空的参数
      const params = Object.keys(this.queryForm).reduce((cur, item) => {
        if (this.queryForm[item]) {
          cur[item] = this.queryForm[item]
        }
        return cur
      }, {})
      const paramsKeys = Object.keys(params)
      this.caiLiaoTable = this.resultFilterClone.filter((item) => {
        let flag = false
        for (let i = 0; i < paramsKeys.length; i++) {
          if (item[paramsKeys[i]].indexOf(params[paramsKeys[i]]) > -1) {
            flag = true
          } else {
            flag = false
            break
          }
        }
        return flag
      })
    },

2.场景二,多选项为多选

    async search() {
      await this.getRequestCaiLiaoDetail()
      const values = Object.values(this.queryForm)
      // 参数都为空
      if (values.every((item) => item.length === 0)) {
        this.caiLiaoTable = this.resultClone
        return
      }
      // 去除为空的参数
      const params = Object.keys(this.queryForm).reduce((cur, item) => {
        if (this.queryForm[item].length > 0) {
          cur[item] = this.queryForm[item]
        }
        return cur
      }, {})
      const paramsKeys = Object.keys(params)
      this.caiLiaoTable = this.resultFilterClone.filter((item) => {
        let flag = false
        for (let i = 0; i < paramsKeys.length; i++) {
          if (this.haveContain(params[paramsKeys[i]], item[paramsKeys[i]])) {
            flag = true
          } else {
            flag = false
            break
          }
        }
        return flag
      })
    },
    // 查看多选项是否有当前字段
     haveContain(arr, field) {
      let flag = false;
      flag = arr.some(el => {
        return field.indexOf(el) > -1
      })
      return flag
    },