检查是否有键值中的对象都是假的
我正在寻找一个简单的解决方案,以检查是否任何键值中的对象是false
。
我有几个独特的密钥的对象,然而,它们只包含布尔值(true
或false
)
var ob = { stack: true,
overflow: true,
website: true
};
我知道,我能得到钥匙的数量的一个对象,下面一行:
Object.keys(ob).length // returns 3
有一个内置的方法来检查是否有键值是假的,而无需通过对象中的每个键具有循环?
解决方案:
要检查是否任何键 - 使用。
// 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
您可以创建一个功能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));
forEach是一个不错的选择,因为它需要遍历所有内容。如果找到一个,则无需循环。它工作,效率低下。 – epascarello
@epascarello,你现在可以检查了吗..通过使用'Array#find()'改进了代码' –
简短的回答不,你必须循环,循环不显著负载添加到您的网页,所以我不明白为什么你不能使用它 –
“不必循环对象中的每个键”也许,但它更难.... – Feathercrown
你认为像'Array.map()'“循环”的东西? – BadZen