如何按多条件匹配嵌套form_items元素以筛选目标对象数组
实现逻辑
筛选核心规则为:保留外层数组中满足以下要求的元素:过滤对象的每一项筛选条件,都能在该元素的form_items数组里找到至少一个子项匹配对应条件。
代码实现
// 转换过滤对象为键值对数组,方便遍历校验 const filterEntries = Object.entries(filter); const filteredResult = array.filter(parentItem => { // 校验所有过滤条件是否都被满足 return filterEntries.every(([filterKey, expectedValue]) => { // 校验当前外层元素的form_items中是否存在子项匹配当前单条过滤条件 return parentItem.form_items.some(formSubItem => formSubItem[filterKey] === expectedValue); }); }); console.log(filteredResult); // 输出结果和你预期的完全一致
方法说明
Object.entries(filter):将过滤对象转换为[[键1, 值1], [键2, 值2]]格式的数组,统一遍历所有筛选规则Array.filter:遍历原始外层数组,筛选出符合规则的元素Array.every:保证所有筛选规则全部被满足,只要有一条规则不匹配就丢弃当前外层元素Array.some:遍历form_items子数组,只要有一个子项匹配当前单条筛选规则就返回真
如果后续你需要调整规则为「同一个form子项同时满足所有过滤条件」,可以将代码调整为:
const filterEntries = Object.entries(filter); const filteredResult = array.filter(parentItem => { return parentItem.form_items.some(formSubItem => { return filterEntries.every(([key, val]) => formSubItem[key] === val); }); });
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

