如何从嵌套对象中过滤仅保留true值并维持原结构
问题描述
给定如下嵌套结构的errors对象:
const errors = { frontdesk: { PreAudit: true, AuthSent: false, Limitation: false, }, clinical: { medicaid: true, Vitals: true, Height: false, }, eligibilityVerification: { Mentioned: true, EVAttached: false, } };
需要过滤掉所有值为false的属性,仅保留值为true的属性,同时维持原有的对象嵌套结构。
解决方案
可以通过递归遍历对象的方式实现需求,以下是JavaScript的实现代码:
function filterTrueErrors(obj) { const filtered = {}; for (const key in obj) { if (obj.hasOwnProperty(key)) { const value = obj[key]; if (typeof value === 'object' && value !== null) { const nestedFiltered = filterTrueErrors(value); if (Object.keys(nestedFiltered).length > 0) { filtered[key] = nestedFiltered; } } else { if (value === true) { filtered[key] = value; } } } } return filtered; } // 使用示例 const filteredErrors = filterTrueErrors(errors);
处理结果
运行上述代码后,得到的filteredErrors结果如下:
{ frontdesk: { PreAudit: true }, clinical: { medicaid: true, Vitals: true }, eligibilityVerification: { Mentioned: true } }
代码说明
- 递归函数
filterTrueErrors遍历输入对象的每个属性:- 若属性值是嵌套对象,递归调用自身处理子对象,仅当子对象处理后存在有效属性时,才将其加入结果;
- 若属性值为布尔类型,仅保留值为
true的属性;
- 该实现支持任意深度的嵌套对象,同时避免生成空的嵌套对象。
内容的提问来源于stack exchange,提问作者faraz zaidi
相关产品推荐
相关产品推荐

