javascript - 如何使用 JavaScript 中的过滤器根据用户输入过滤整个数组?

标签 javascript reactjs filter ecmascript-6

我正在尝试使用 javascript 中的过滤器来搜索数组。 以下是我的数组:-

 "customerStatusInfoList": [
            {
                "customerId": 1110000012,
                "caseStatus": "pending",
                "customerName": "Robert",
                "dateOfRequest": "2018-12-15 00:00:00.0"
            },
            {
                "customerId": 1110000004,
                "auditorName": "DcbAdmin",
                "caseStatus": "pending",
                "customerName": "Sam",
                "dateOfRequest": "2018-12-14 12:40:04.0"
            }
        ]

我正在使用以下函数来过滤数组:-

  filterTable = event => {
    console.log("event.target.value", event.target.value);
    console.log("rows", this.state.rows);

    if (event.target.value !== "") {
      let newRow = this.state.rows.filter(items => {
        console.log("item.name", items.customerName);
        if (items.customerName!== null)
          return items.customerName
            .toLowerCase()
            .includes(event.target.value.toLowerCase());
      });

      this.setState({ rows: newRow, query: event.target.value });
    } else {
      console.log("Query string is empty ", event.target.value);
      let newRow = this.state.custList;
      console.log("new row :", newRow);
      this.setState({ query: event.target.value, rows: newRow });
    }
  };

我能够过滤 customerName,但是当我尝试使用 customerId 或任何其他参数进行过滤时,我得到 customerId.includes 不是一个函数。 但它适用于 customerName。 如何使用 JavaScript 过滤器过滤整个表格? 任何帮助或建议表示赞赏。谢谢。

最佳答案

customerId 是一个整数 - 您需要转换为字符串,例如:

return `${items.customerId}`
  .toLowerCase()
  .includes(event.target.value.toLowerCase());

顺便说一句,items 是一个令人困惑的变量名称 - 它是单个项目

此外,您可以通过分解项目来稍微简化事情,即:

let newRow = this.state.rows.filter(({customerId, customerName}) => 
  `${customerName || ''}`
    .toLowerCase()
    .includes(event.target.value.toLowerCase())
);

包含与 customerIdcustomerNameauditorName 匹配的任何行:

let newRow = this.state.rows.filter(({customerId, customerName, auditorName}) => 
  [customerId, customerName, auditorName].some(field => 
    `${field || ''}`
      .toLowerCase()
      .includes(event.target.value.toLowerCase()))
);

关于javascript - 如何使用 JavaScript 中的过滤器根据用户输入过滤整个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53826288/

相关文章:

javascript - 向 promise 结果添加额外数据

javascript - 如果 '?' 已存在于 URL 中,如何将 '&' 替换为 '?'?

javascript - "Cannot read property ' setState ' of undefined"即使它是绑定(bind)的

azure - Azure Web 应用程序的其他路径返回错误

javascript - 无法使用 babel 将 jsx 转译为 js

filter - 如何按 Power BI 中的度量筛选结果

filter - 如何修改 JIRA 的 "Quick Search"?

date - 如何在 Google 表格中按日期过滤?

javascript - Jasmin Mock $http(然后, catch )

Javascript:获取页面元素的内容并将其用作变量?