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您是对的。我把第二个过滤器改成了一些,现在它可以工作了。非常感谢。