如何过滤benefitGroups,仅保留含coverageLineIds=1的benefits的组?
如何过滤benefitGroups数组,保留包含coverageLineId=1的组
我有一个名为benefitGroups的数组,每个元素包含benefits集合,每个benefit项都有coverageLineIds数组。需要过滤这个数组,只保留那些benefits中至少有一项的coverageLineIds包含ID 1的组。
代码示例
const benefitGroups = [ { id: 1, name: "Benefit Group A", benefits: [ { id: 1, benefitGroupId: 1, name: "Benefit Z", coverageLineIds: [1, 2] }, { id: 2, benefitGroupId: 1, name: "Benefit X", coverageLineIds: [1, 2] }, { id: 3, benefitGroupId: 1, name: "Benefit Y", coverageLineIds: [1, 2] }, ], }, { id: 2, name: "Benefit Group B", benefits: [ { id: 4, benefitGroupId: 2, name: "Benefit I", coverageLineIds: [1] }, { id: 5, benefitGroupId: 2, name: "Benefit J", coverageLineIds: [1] }, { id: 6, benefitGroupId: 2, name: "Benefit H", coverageLineIds: [1] }, ], }, { id: 3, name: "Benefit Group C", benefits: [ { id: 7, benefitGroupId: 3, name: "Benefit D", coverageLineIds: [3, 4] }, { id: 8, benefitGroupId: 3, name: "Benefit E", coverageLineIds: [3, 4] }, { id: 9, benefitGroupId: 3, name: "Benefit F", coverageLineIds: [3, 4] }, ], }, ];
解决方案
可以通过数组的filter()和some()方法组合实现,配合includes()检查ID是否存在:
const filteredGroups = benefitGroups.filter(group => group.benefits.some(benefit => benefit.coverageLineIds.includes(1)) );
代码解释
filter():遍历benefitGroups数组,仅保留返回true的元素some():检查当前组的benefits集合中,是否至少有一个benefit满足条件includes(1):判断当前benefit的coverageLineIds数组中是否包含ID 1
结果说明
在示例代码中,filteredGroups会返回Benefit Group A和Benefit Group B——它们的benefits里都存在coverageLineIds包含1的项;而Benefit Group C的所有benefit的coverageLineIds都不含1,会被过滤掉。
内容的提问来源于stack exchange,提问作者noclist
相关产品推荐
相关产品推荐

