问题:
我正在寻找一个简单的解决方案,以检查对象中的任何键值是否为false
。
我有一个带有几个唯一键的对象,但是,它们只包含布尔值(true
或false
)
var ob = { stack: true,
overflow: true,
website: true
};
我知道我可以使用以下行获取对象中的键数:
Object.keys(ob).length // returns 3
是否有内置方法来检查是否有任何键值为false而不必遍历对象中的每个键?
解决方案:
要检查是否任何键 - 请使用Array.prototype.some()
。
// to check any keys are false
Object.keys(ob).some(k => !ob[k]); // returns false
要检查所有键是否使用Array.prototype.every()
。
// to check if all keys are false
Object.keys(ob).every(k => !ob[k]); // returns false
答案 0 :(得分:14)
您可以使用Array.some
方法:
var hasFalseKeys = Object.keys(ob).some(k => !ob[k]);
答案 1 :(得分:2)
这是我要这样做的方式:
Object.values(ob).includes(false); // ECMAScript 7
// OR
Object.values(ob).indexOf(false) >= 0; // Before ECMAScript 7
答案 2 :(得分:0)
您可以创建一个函数isAnyKeyValueFalse
,在您的应用程序中重用它,使用Array#find()返回数组中第一个满足提供的测试函数的元素。
如果没有对象属性为false,则返回false
,如果有任何属性为false,则返回true。
代码:
var ob = {
stack: true,
overflow: true,
website: true
};
function isAnyKeyValueFalse(obj) {
return Object.keys(obj).find(key => !obj[key]) ? true : false;
}
console.log(isAnyKeyValueFalse(ob));
答案 3 :(得分:0)