如何知道所有javascript对象值是否都为真?

时间:2013-06-14 21:44:19

标签: javascript

在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个项目,需要知道是否都是真的。

6 个答案:

答案 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)

具有 Boolean() 功能的更短版本[感谢xab]

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