64

在 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 件物品,并且需要知道是否所有物品都是真的。

4

5 回答 5

80

使用 ES2017 Object.values()生活变得更加简单。

Object.values(yourTestObject).every(item => item)

带有Boolean()函数的更短版本[感谢xab]

Object.values(yourTestObject).every(Boolean)

或者通过更严格的真实检查

Object.values(yourTestObject)
    .every(item => item === true)
于 2018-03-21T21:41:48.253 回答
57

在现代浏览器中:

var allTrue = Object.keys(myObj).every(function(k){ return myObj[k] });

如果您真的想检查true而不仅仅是一个真实值:

var allTrue = Object.keys(myObj).every(function(k){ return myObj[k] === true });
于 2013-06-14T21:47:34.440 回答
38

怎么样:

    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如果所有值都是true-ish ,这将返回,不一定完全等于 True 的布尔值。此外,它将扫描传入对象的所有属性,包括其原型。这可能是也可能不是您需要的,但是它应该可以在您提供的简单对象文字上正常工作。

于 2013-06-14T21:46:49.613 回答
1

最快的方法是循环

for(var index in myObj){
  if(!myObj[index]){ //check if it is truly false
    var fail = true
  }
}
if(fail){
  //test failed
}

这将循环数组中的所有值,然后检查该值是否为假,如果是则设置失败变量,女巫会告诉你测试失败。

于 2013-06-14T21:49:32.247 回答
0

您可以every从 lodash使用

const obj1 = { a: 1, b: 2, c: true };
const obj2 = { a: true, b: true, c: true }; 

_.every(obj1, true);  // false
_.every(obj2, true);  // true
于 2020-09-11T21:42:02.503 回答