在JavaScript中,我需要知道是否所有对象项都设置为true。
如果我有以下物品:
var myObj = {title:true, name:true, email:false};
我可以这样写:
if(myObj.title && myObj.name && myObj.email){
/*Some code */
};
但我正在寻找最简单的方法来编写它。例如:
if(myObj all is true){
/*Some code */
};
我可能有另外一个对象,里面有10-20个项目,需要知道是否都是真的。
答案 0 :(得分:30)
在现代浏览器中:
var allTrue = Object.keys(myObj).every(function(k){ return myObj[k] });
更短的替代方案是:
var allTrue = myObj.every(function(i) { return i; });
如果确实想要检查true
而不仅仅是真正的值:
var allTrue = Object.keys(myObj).every(function(k){ return myObj[k] === true });
答案 1 :(得分:22)
如下:
function allTrue(obj)
{
for(var o in obj)
if(!obj[o]) return false;
return true;
}
var myObj1 = {title:true, name:true, email:false};
var myObj2 = {title:true, name:true, email:true};
document.write('<br />myObj1 all true: ' + allTrue(myObj1));
document.write('<br />myObj2 all true: ' + allTrue(myObj2));
一些免责声明:如果所有值都是 true-ish ,则返回true
,不一定等于布尔值True。此外,它还将扫描传入对象的所有属性,包括其原型。这可能是你需要的,也可能不是你需要的,但它应该在你提供的简单对象文字上正常工作。
答案 2 :(得分:20)
ES2017 Object.values()生活更简单。
Object.values(yourTestObject).every(item => item)
Object.values(yourTestObject).every(Boolean)
或者使用更严格的 true 检查
Object.values(yourTestObject)
.every(item => item === true)
答案 3 :(得分:1)
最快的方式是循环
for(var index in myObj){
if(!myObj[index]){ //check if it is truly false
var fail = true
}
}
if(fail){
//test failed
}
这会遍历数组中的所有值,然后检查该值是否为false,如果是,那么它将设置失败变量,将告诉您测试失败。
答案 4 :(得分:0)
您可以在lodash中使用every
const obj1 = { a: 1, b: 2, c: true };
const obj2 = { a: true, b: true, c: true };
_.every(obj1, true); // false
_.every(obj2, true); // true
答案 5 :(得分:-1)
使用lodash实现:
var myObj = {a: true, b: true, c: undefined};
_.every(_.values(myObj), (value) => value == true);