JS数组中批量删除前缀匹配且对应value存在true的所有对象
实现方案
核心思路
- 第一次遍历数组,收集所有
fieldValue为true的条目对应的前缀,存入黑名单集合 - 第二次遍历数组,过滤掉所有前缀在黑名单内的条目即可
完整代码实现
const data = [{ field_name_key: "Recive_IsViaEmail", fieldValue: false }, { field_name_key: "Recive_IsViaSMS", fieldValue: false }, { field_name_key: "Sender_IsViaEmail", fieldValue: false }, { field_name_key: "Sender_IsViaSMS", fieldValue: true } ] // 封装提取前缀的公共方法:取字段名最后一个下划线之前的内容作为前缀,兼容无下划线的字段名 const getFieldPrefix = (fieldKey) => { const lastUnderlineIdx = fieldKey.lastIndexOf('_') return lastUnderlineIdx === -1 ? fieldKey : fieldKey.slice(0, lastUnderlineIdx) } // 构建需要删除的前缀黑名单 const invalidPrefixSet = new Set() for (const item of data) { if (item.fieldValue) { invalidPrefixSet.add(getFieldPrefix(item.field_name_key)) } } // 过滤得到最终结果 const filteredData = data.filter(item => !invalidPrefixSet.has(getFieldPrefix(item.field_name_key))) console.log(filteredData)
运行结果
上述代码运行后得到的filteredData和预期结果完全一致:
[ { field_name_key: 'Recive_IsViaEmail', fieldValue: false }, { field_name_key: 'Recive_IsViaSMS', fieldValue: false } ]
补充说明
如果你的字段前缀规则不是取最后一个下划线之前的内容,只需要修改getFieldPrefix方法里的前缀提取逻辑即可,无需改动整体流程。
内容的提问来源于stack exchange,提问作者vinuta
相关产品推荐
相关产品推荐

