首页 > 解决方案 > 嵌套过滤器不起作用

问题描述

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

第一个图像 - 第 0 个索引值

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

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

selectedContractTypeIds=[1,2,3];

该值是从对应于 contracttypeId 值的多选下拉列表中获得的。

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

上面的代码不起作用。任何人都可以帮助我使用此代码

假设如果

selectedContractTypeIds=[1,2,5,6]

上述 contractIds 的示例输出为

[{
..
..
..
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

标签: angulartypescript

解决方案


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

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

这是这段代码中发生的事情:您使用传递给的函数filter的对象。将仅保留函数返回的那些值(非布尔值将转换为布尔值,因此如果函数返回、、或某些元素,则该元素将从数组中排除如果它返回任何其他值,它将被包括在内)。在您的情况下,此函数返回 another的结果和 another 的结果。总是返回一个数组(可能为空或不为空)并且一个数组是一个真实值,所以外部将只包含searchClauseListfilterfiltersearchClauseListtruefalseundefinednull0''filterfilterfilterfilter的每个元素,searchClauseList因为您的函数为 的任何元素返回一个真实值searchClauseList,这就是它不起作用的原因。

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

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

推荐阅读