Javascript 数组筛选器未返回正确的值

Javascript 数组筛选器未返回正确的值,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我正在使用react admin框架。我正在创建两个数组的交集,如果条件返回true,该交集将返回一个或多个元素。但是,由于某些原因,最后一个条件被跳过 const filterWithTags = response.docs.filter((doc: any) => doc.hasOwnProperty("tags") && doc.tags.length > 0 && (tags as any).filter((tag: any) => do

我正在使用
react admin
框架。我正在创建两个数组的交集,如果条件返回true,该交集将返回一个或多个元素。但是,由于某些原因,最后一个条件被跳过

const filterWithTags = response.docs.filter((doc: any) => doc.hasOwnProperty("tags") && doc.tags.length > 0 && (tags as any).filter((tag: any) => doc.tags.includes(tag)));
此代码仅返回符合前两个条件的元素
(hasOwnProperty和length>0)
。我还需要它继续执行
includes
条件。 你知道我做错了什么吗


提前感谢

您需要检查
标签
是否包含一些数据:

const filterWithTags = response.docs.filter((doc: any) => doc.hasOwnProperty("tags") 
    && doc.tags.length > 0 
    && (tags as any).some((tag: any) => doc.tags.includes(tag)));

如果
doc
有属性
tags
并且
doc.tags
有项目,那么我们可以通过
doc.tags

检查它是否包含一些
tags
标签,这部分情况总是被视为
true
-
(标签为任意)。过滤器((标签:any)=>doc.tags.includes(标签))

即使没有任何值​​满足条件的过滤器总是返回空数组。在JS中被视为
true
的任何类型的数组。

最后一个条件不是总是
true
.filter
返回一个数组并
!![]//true
。您可能需要添加
.length>0
我还认为它应该可以工作。它仍然应该只返回一个元素,返回两个。基本上,它返回每个有标记的元素,标记有项目。@MoritzRoessler噢,对不起,你说得对。我已经更新了我的answer@StepUp是的,这解决了问题。谢谢。
filter()
返回一个数组,即使该数组为空,也将是真实的。您想使用
some()
而不是
filter()
。最后一个条件将始终为真。您可以检查过滤数组的长度,或者使用
some
代替filter。@Lennholm您是对的。我把第二个过滤器改成了一些,现在它可以工作了。非常感谢。