如何检测嵌套对象中是否存在任意键值为true?
递归检测嵌套对象中是否存在值为true的键
首先,你的现有代码逻辑和需求不符:原函数!Object.keys(o).find(k => !o[k])是判断所有键的值都为true,而你需要的是检测任意层级中是否存在值为true的键。下面是支持嵌套对象的解决方案:
实现思路
- 遍历对象的每个键值对
- 如果当前值是
true,直接返回true - 如果当前值是对象(且不是null),递归调用检测函数
- 遍历完所有键都没找到
true,返回false
代码实现
const odb = { "all": true, "allA": false, "allB": false, "allC": { "allD": false, "allE": false, } } const isAnyKeyValueTrue = (obj) => { // 遍历对象的每个键 for (const key in obj) { const value = obj[key]; // 找到值为true的直接返回 if (value === true) { return true; } // 如果是对象且不是null,递归检测 if (typeof value === 'object' && value !== null) { if (isAnyKeyValueTrue(value)) { return true; } } } // 所有层级都没找到true return false; } console.log(isAnyKeyValueTrue(odb)); // 输出: true
额外说明
- 函数会在找到第一个
true时立即返回,避免不必要的遍历,性能更优 - 处理了
null的情况(因为typeof null是object,需要排除) - 支持任意多层嵌套的对象结构
内容的提问来源于stack exchange,提问作者Honey Singh
相关产品推荐
相关产品推荐

