我有一个项目数组items[]
。每个都有一个 bool 属性 filtered
和一个名为 tags[]
的数组属性。
我还有另一个数组:selected_tags
。
通过此循环,我可以根据所选标签过滤所有项目:
items.forEach(function (item) {
if (selected_tags.length > 0)
tag_filter = !selected_tags.some(tag => item.tags.includes(tag));
// ... other_filter = something else...
item.filtered = !(!tag_filter && !other_filter);
});
这适用于任何逻辑(如果所选标签中有任何标签,则显示该项目)。我想使用 ALL 逻辑来执行此操作(如果所有选定的标签都在项目标签中,则显示它)。
所以,很自然地,我想知道包含是否可以做这样的事情:
[1,2,3].includes([1,2,3])
[1,2,3].includes(1,2,3)
tag_filter = item.tags.includes(selected_tags);
但它给出了错误。
我可以在执行此操作的同时将其保留为一个简单的单行代码,如果经过过滤则返回 tag_filter = true
,如果没有则返回 false
?
最佳答案
您可以使用.every()而不是 .some()
例如:
[1,2,3].every(x => [1,2,3].includes(x))
此外,您还可以更改
item.filtered = !(!tag_filter && !other_filter)
到
item.filtered = tag_filter || other_filter
关于javascript - 标签系统从 ANY 到 ALL 的 bool 切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57874220/