javascript - 使用多个过滤器过滤从 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
}
}
];
解决方案
我将根据您的描述而不是您的示例来建立数据,因为它们现在没有对齐 - 从语法上讲,数据实际上是无效的。
要获取所有过滤器都为真的结果,您可以组合.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);
推荐阅读
- java - Android Studio 中的“导入”字符串
- python - 错误 pyfits 安装:命令“python setup.py egg_info”失败,错误代码 1 在 /tmp/pip-install-zMkboe/pyfits/
- javascript - 如果节点事件也被触发,则取消窗口事件
- alexa - Alexa 帐户与第 3 方资源服务器的链接
- java - 如何使用@NaturalId 正确覆盖 Hibernate 实体的等于
- action - Adobe Photoshop“另存为”操作
- javascript - 当字符串包含数组中的单词时向字符串添加空格
- wpf - 如何转换边框而不是里面的内容?
- c++ - 两包可变参数模板参数
- sql - 插入具有计算值和默认值的表