嵌套过滤器不摇晃



我需要根据现有合约类型中存在的contractTypeId进行过滤。

第一张图片 - 第 0 个索引值

第二张图片 - 第一张索引值 [![ 0 索引 ][0]|[1]

[!1 索引][2]][2]

selectedContractTypeIds=[1,2,3];

此值是从与合同类型 ID 值对应的多选下拉列表中获取的。

this.searchClauseList=  this.searchClauseList.filter((x) => x.existingContractTypes.filter((y) => selectedContractTypeIds.indexOf(y.contractTypeId) >-1) );

上面的代码不起作用。任何人都可以帮我完成此代码吗

假设如果

selectedContractTypeIds=[1,2,5,6]

上述合约 ID 的示例输出为

[{
..
..
..
existingcontractTypes:[
{ contractTypeId:2, contractTypeName:"MSA"....}
]
..
..
},
{
..
..
..
existingcontractTypes:[
{ contractTypeId:2, contractTypeName:"MSA"....}
]

]

我希望这个样本能帮助你理解我的问题 [1]: https://i.stack.imgur.com/PPKQV.png [2]: https://i.stack.imgur.com/vhFwj.png

您的问题很难理解,请更准确,让我们轻松理解您想要什么。

this.searchClauseList = this.searchClauseList.filter(
x => x.existingContractTypes.filter(
y => selectedContractTypeIds.indexOf(y.contractTypeId) > -1
)
)

以下是此代码中发生的情况:使用传递给filter的函数filtersearchClauseList对象。filter将只保留函数返回的那些searchClauseListtrue(非布尔值被转换为布尔值,所以如果函数返回falseundefinednull0''对于某个元素,这个元素将被排除在数组之外,如果它返回其他任何内容, 它将被包括在内)。在您的情况下,此函数返回另一个filter的结果,以及另一个filter的结果。filter总是返回一个数组(可能为空也可能不为空),而数组是一个真值,所以外部filter将只包含searchClauseList的每个元素,因为你的函数为searchClauseList的任何元素返回一个真值,这就是它不起作用的原因。

要使其正常工作,请考虑您需要什么:您需要filtersearchClauseList数组,以仅包含数组element.existingContractTypessome对象在selectedContractTypeIds中的元素。所以你需要在里面使用some函数,而不是filter

this.searchClauseList.filter(
x => x.existingContractTypes.some(
y => selectedContractTypeIds.indexOf(y.contractTypeId) > -1
)
)

数组的 filter() 方法要求你迭代的项目将返回布尔值。 内部过滤器包含对 indexOf()> -1 的调用,这将导致布尔值,但外部过滤器不会。 我对外部 filter() 调用的猜测是,您的意思是检查数组中是否有任何项目(.lenght> 0)。

不确定我是否正确解释了您的问题,但我尝试在代码中模拟您的情况,并在您当前的过滤中遇到同样的问题 + 我在应用我提出的建议时修复了它。在线示例

最新更新