angular - 嵌套过滤器不起作用
问题描述
我需要根据现有合同类型中存在的合同类型 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
解决方案
您的问题很难理解,请更准确,让我们更容易理解您想要什么。
this.searchClauseList = this.searchClauseList.filter(
x => x.existingContractTypes.filter(
y => selectedContractTypeIds.indexOf(y.contractTypeId) > -1
)
)
这是这段代码中发生的事情:您使用传递给的函数filter
的对象。将仅保留函数返回的那些值(非布尔值将转换为布尔值,因此如果函数返回、、或某些元素,则该元素将从数组中排除,如果它返回任何其他值,它将被包括在内)。在您的情况下,此函数返回 another的结果和 another 的结果。总是返回一个数组(可能为空或不为空)并且一个数组是一个真实值,所以外部将只包含searchClauseList
filter
filter
searchClauseList
true
false
undefined
null
0
''
filter
filter
filter
filter
的每个元素,searchClauseList
因为您的函数为 的任何元素返回一个真实值searchClauseList
,这就是它不起作用的原因。
要使其工作,请考虑您需要什么:您需要filter
在searchClauseList
数组中仅包含数组中some
的对象所在的元素。所以你需要在里面使用函数,而不是:element.existingContractTypes
selectedContractTypeIds
some
filter
this.searchClauseList.filter(
x => x.existingContractTypes.some(
y => selectedContractTypeIds.indexOf(y.contractTypeId) > -1
)
)
推荐阅读
- sql - postgres: sum if count distinct id = 1
- javascript - 在第三方跨域脚本中捕获错误
- linux - 在 docker 容器中使用 systemd 创建 linux 服务
- python - Flask,使用表单输入作为全局变量执行自定义ETL模块,使用表单提交作为输入,然后在完成后显示图表
- firebase - Firebase 数据排序未按预期工作
- reactjs - Redux 工具包迁移
- javascript - 如何在负载平衡的环境中使用 Laravel 将大文件从浏览器上传到 S3?
- c - C - 如何在 ncurses 库中使用 halfdelay(i)
- android - Xamarin.Android 使用包名称启动应用程序
- r - 拟合序数逻辑混合效应模型