检查是否有键值中的对象都是假的

问题描述:

问:检查是否有键值中的对象都是假的

我正在寻找一个简单的解决方案,以检查是否任何键值中的对象是false

我有几个独特的密钥的对象,然而,它们只包含布尔值(truefalse

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 

+0

简短的回答不,你必须循环,循环不显著负载添加到您的网页,所以我不明白为什么你不能使用它 –

+0

“不必循环对象中的每个键”也许,但它更难.... – Feathercrown

+0

你认为像'Array.map()'“循环”的东西? – BadZen

可以使用Array.some方法:

var hasFalseKeys = Object.keys(ob).some(k => !ob[k]); 
+0

您也可以使用Object.values' – Florent

+0

@Florent - 是的 - 逻辑将仍然是相同的 - 获取值,检查与'some'或'每个'EM – tymeJV

+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));

+1

forEach是一个不错的选择,因为它需要遍历所有内容。如果找到一个,则无需循环。它工作,效率低下。 – epascarello

+0

@epascarello,你现在可以检查了吗..通过使用'Array#find()'改进了代码' –