查找是否有任何键值为真



嗨,我正在试图找出对象的任何键值是否为true。

以下仅适用于没有嵌套对象的对象。

我正在尝试检查对象中是否有任何密钥,无论是父对象还是子对象,都具有真实值

const odb = {
"all": true,
"allA": false,
"allB": false,
"allC": {
"allD": false,
"allE": false,
}
}

const isAnyKeyValueTrue = o => !Object.keys(o).find(k => !o[k]);
console.log(isAnyKeyValueTrue(odb));

检查该值是否为对象,如果是,则再次调用isAnyKeyValueTrue。此外,为了在语义上更正确,我使用了some而不是find。我使用&& o[k]来确保null没有被赋予函数(因为typeof null === "object"(。

const odb = {
"all": false,
"allA": false,
"allB": false,
"allC": {
"allD": false,
"allE": { "allF": true },
}
}

const isAnyKeyValueTrue = o => Object.keys(o).some(k => typeof o[k] === "object" && o[k] ? isAnyKeyValueTrue(o[k]) : o[k] === true);
console.log(isAnyKeyValueTrue(odb));

关键是,如果我们在当前级别中没有找到匹配的结果,那么我们需要使用||在子级别中通过递归调用当前函数来找到

const odb = {
"all": false,
"allA": false,
"allB": false,
"allC": {
"allD": false,
"allE": false,
'allF':{
'allG':true
}
}
}

const isAnyKeyValueTrue = o => Object.values(o).some(v => ((typeof v == `boolean`) && v) || isAnyKeyValueTrue(v)) 
console.log(isAnyKeyValueTrue(odb));

const odb = {
"all": false,
"allA": false,
"allB": false,
"allC": {
"allD": false,
"allE": { "allF": true },
}
}
const isTrue = (obj) => {
let result = false;
for (let key in obj) {
if (obj[key] === true) {
result = true;
break;
} else if (typeof obj[key] === 'object') {
result = isTrue(obj[key]);
}
}
return result;
}
console.log(isTrue(odb));

最新更新