如何对嵌套JavaScript对象执行布尔校验:判断所有值是否全为true
检查嵌套JavaScript对象所有值是否全为true的解决方案
要处理嵌套对象的遍历,核心思路是递归检查每个值:如果当前值是对象(且不是null),就递归遍历它的所有属性值;如果是原始值,就判断是否为true。结合every()方法可以实现这个逻辑,因为every()会在遇到第一个不符合条件的元素时立即停止遍历,效率更高。
实现代码
function allValuesTrue(obj) { // 获取对象所有属性值并遍历检查 return Object.values(obj).every(value => { // 排除null(typeof null会返回object),仅处理真正的对象结构 if (typeof value === 'object' && value !== null) { // 递归检查嵌套对象 return allValuesTrue(value); } // 非对象值直接判断是否为true return value === true; }); }
代码解释
Object.values(obj):提取对象的所有属性值,转为数组后用every()遍历。every()特性:只要有一个元素不满足条件就立即终止遍历,避免不必要的计算。- 递归逻辑:遇到嵌套对象时,调用自身继续检查该对象的所有值,确保深层嵌套的属性被覆盖。
- 边界处理:判断
value !== null是因为typeof null会误判为object,但null不属于需要遍历的对象结构。
测试示例对象
用你提供的示例对象测试:
const testObj = { "2211284396232-5": { "2211284396232-5": true, "644889430161": { "4812219518053": false, "4812219518055": false, "4812219518063": false, "4812219518064": true, "4812219518069": false, "644889430161": false }, }, "2211628865398-6": { "2211628865398-6": false, "729563966440": { "5229922707373": false, "729563966440": false }, }, "2212485574058-4": { "2212485574058-4": false, "689399023594": { "5077186698704": true, "5077186698712": false, "689399023594": false }, }, }; console.log(allValuesTrue(testObj)); // 输出: false
因为示例对象中存在多个false值,所以最终返回false。如果把所有值改为true,函数会返回true。
扩展:处理数组嵌套
如果对象中可能包含数组,只需在逻辑中加入数组判断:
function allValuesTrue(obj) { return Object.values(obj).every(value => { if (typeof value === 'object' && value !== null) { // 处理数组情况:遍历数组每个元素递归检查 if (Array.isArray(value)) { return value.every(allValuesTrue); } return allValuesTrue(value); } return value === true; }); }
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

