
本文介绍如何使用递归函数深度遍历任意层级的嵌套 JavaScript 对象,并统一将其中所有布尔值(如 false)翻转为相反值(如 true),支持原地修改与安全复用。
本文介绍如何使用递归函数深度遍历任意层级的嵌套 javascript 对象,并统一将其中所有布尔值(如 `false`)翻转为相反值(如 `true`),支持原地修改与安全复用。
在处理树形结构或深层嵌套配置对象时,常需批量更新特定类型字段(如开关状态、启用标识等)。针对含多层嵌套的对象,简单 for...in 或 Object.keys() 仅能遍历第一层,必须借助递归遍历实现全量触达。
以下是一个简洁、健壮的递归方案,使用 Object.entries() 配合 typeof v === 'object' && v !== null 判断是否继续深入:
function toggleBooleanValues(obj) {
if (obj === null || typeof obj !== 'object') return;
Object.entries(obj).forEach(([key, value]) => {
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
// 递归处理嵌套对象(跳过数组和 null)
toggleBooleanValues(value);
} else if (typeof value === 'boolean') {
// 仅对布尔值执行取反,避免误改字符串/数字等其他类型
obj[key] = !value;
}
});
}✅ 使用示例:
const data = {
"2211284396232-5": {
"2211284396232-5": false,
"644889430161": {
"4812219518053": false,
"4812219518055": false,
"644889430161": false
}
},
"2211628865398-6": {
"2211628865398-6": false,
"729563966440": {
"5229922707373": false,
"729563966440": false
}
}
};
toggleBooleanValues(data);
console.log(data);
// 所有 false → true,true → false(若原始含 true 值亦会正确翻转)⚠️ 注意事项:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
严格类型判断:使用
typeof value === 'object' && value !== null && !Array.isArray(value)确保只递归普通对象,避免误处理null、数组或内置对象(如Date,RegExp); -
布尔值保护:显式检查
typeof value === 'boolean',防止将"false"字符串或0数字等非布尔值错误翻转; -
原地修改:该函数直接修改原对象,如需保留原始数据,请先用
structuredClone(obj)(现代环境)或深拷贝工具创建副本; - 性能提示:对于超大型嵌套结构(>10k 层级或节点),可考虑使用栈模拟递归以避免调用栈溢出。
? 进阶建议:若需支持「设为 true / false」而非翻转,可将 !value 替换为固定值(如 true),或扩展为接受 transform: (val: boolean) => boolean 参数的高阶函数,提升复用性。
通过此方法,你可精准、安全、可维护地操控任意深度嵌套对象中的布尔状态,适用于权限控制、UI 开关同步、表单初始化等多种工程场景。

















