【问题标题】:Filter data in JavaScript with more than one filter value使用多个过滤器值过滤 JavaScript 中的数据
【发布时间】:2021-11-25 19:49:09
【问题描述】:

我有一个显示产品的 Web 应用程序,并有两个复选框作为过滤器。 “显示可用产品”和“显示带有照片的产品”。

当您单独单击其中任何一个时,它们会自行正确过滤。如果您同时选中两个复选框,它们将无法一起使用。

到目前为止我对以下过滤器代码的了解:

const getFilteredSearchResults = (filters: Types.searchFilters, famData) => {
  //filter based on all search filters
  let filteredResults = _.filter(famData, function (p) {
    //apply filters
    if (
      typeof p["serial-number"] === "undefined" ||
      (filters.rentalFleetAvailability && p["availability"] === "No") ||
      (filters.rentalFleetWithImages &&
        (p["photos"] === undefined || !p["photos"].length))
    ) {
      return false; //don't include in listings
    } else if (
      filters.rentalFleetAvailability &&
      p["availability"] === "Yes" &&
      filters.rentalFleetWithImages &&
      p["photos"].length
    ) {
      return true; //include in listings
    } else {
      return true; //include in listings
    }
  });
};

以上参考的完整代码here和它的呈现代码here

【问题讨论】:

  • 在你的 else 中添加第二个条件(另一个 if)并且只有在两者都满足时才返回 true
  • @VojinPurić 感谢您的建议!刚刚添加了你提到的第二个条件,没有用。我编码正确吗?

标签: javascript arrays reactjs


【解决方案1】:

鉴于我从您的编辑和评论中收集到的信息,我认为这就是您想要的

const getFilteredSearchResults = (filters: Types.searchFilters, famData) => {
    //filter based on all search filters
    let filteredResults = _.filter(famData, function (p) {
      //apply filters
      if (
        typeof p["serial-number"] === "undefined" ||
        (filters.rentalFleetAvailability && p["availability"] === "No") ||
        (filters.rentalFleetWithImages &&
          (p["photos"] === undefined || !p["photos"].length))
      ) {
          //First condition falied we are definetely not accepting this item no need to check other condition
        return false; //don't include in listings
      } else  {
        //First condition passed we need to check second
        if (filters.rentalFleetAvailability &&
            p["availability"] === "Yes" &&
            filters.rentalFleetWithImages &&
            p["photos"].length){
                //Both conditions are met here we return true
                return true; //include in listings
            }else{
                //second condition not met we do not include this
                return false;
            }
      }
    });
  };

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2014-05-28
    • 2020-05-04
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多