首页 > 解决方案 > 使用多个过滤器过滤从 API 接收到的结果

问题描述

目前我正在尝试创建一个多面搜索,但很难应用所有请求的过滤器。现在我从 API 接收数据,假设数据的一部分是特征。它是一个具有键的对象,键是可以为 false、null、''、true 和 '一些有用信息'的特征和值。我目前将所有请求的过滤器收集到一个数组中,例如('hasLasers'、'isAwesome'、'martianRequired')。我可以过滤一个或每个,但不是全部,至少我无法弄清楚。我需要检查所有过滤器数组是否不为 null、false 或 '',不只是一个,而是全部。我不是在寻找每个人的答案,但也许是朝着正确的方向推动,希望我的描述有所帮助!

我尝试创建一个具有布尔值的 do while 循环,如果数组中的一项为假,它会中断,如果它仍然为真并达到数组长度,它“应该”将该项添加到数组中,这似乎增加了一切。我还尝试了 array.every 它应该检查所有返回 true 的地方,但这似乎不起作用。我确实尝试了其他一些,但我很快意识到我只是在测试一个过滤器或每个过滤器......

arrFilters = ["hasWizards", "includesCheese", "moonView"]
apiResults.forEach(function(data) {
 const features = apiResults.features;
  Object.entries(features).forEach(
   ([key, value]) => {
    //need to find all values to arrFilters that are not null, false, or ''
   }
  );
})

API 结果如下所示:

const apiResults = [{
    id: 1,
    features: {
      hasWizards: true,
      moonView: "",
      includesCheese: false,
      moreUnicorns: null
    }
  },
  {
    id: 2,
    features: {
      hasWizards: true,
      moonView: "Yes",
      includesCheese: true,
      moreUnicorns: null
    }
  },
  {
    id: 3,
    features: {
      hasWizards: "Yup",
      moonView: true,
      includesCheese: true,
      moreUnicorns: null
    }
  }
];

标签: javascript

解决方案


我将根据您的描述而不是您的示例来建立数据,因为它们现在没有对齐 - 从语法上讲,数据实际上是无效的。

要获取所有过滤器都为真的结果,您可以组合.filter().every()

逻辑是“对于每条数据,检查每个特征是否从arrFilters评估为true

const apiResults = [{
    id: 1,
    features: {
      hasWizards: true,
      moonView: "",
      includesCheese: false,
      moreUnicorns: null
    }
  },
  {
    id: 2,
    features: {
      hasWizards: true,
      moonView: "Yes",
      includesCheese: true,
      moreUnicorns: null
    }
  },
  {
    id: 3,
    features: {
      hasWizards: "Yup",
      moonView: true,
      includesCheese: true,
      moreUnicorns: null
    }
  }
];

const arrFilters = ["hasWizards", "includesCheese", "moonView"];
const results = apiResults.filter(data => arrFilters.every(filter => data.features[filter]));

console.log(results);


推荐阅读