如何知道是否所有的 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个项目,并将需要知道是否所有为真。

80064 次浏览

比如说:

    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 的布尔值。此外,它还将扫描传入对象的 所有属性,包括其原型。这可能是您所需要的,也可能不是,但是它应该可以很好地工作在一个简单的对象文字上,比如您提供的对象文字。

在现代浏览器中:

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

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

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

最快的方法是循环

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

这将循环数组中的所有值,然后检查该值是否为 false,如果为 false,那么它将设置失败变量,这将告诉您测试失败。

有了 ES2017 Value ()生活就更简单了。

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

更短的版本,带有 < a href = “ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global _ Objects/Boolean”rel = “ noReferrer”> Boolean () 功能[感谢 < a href = “ https://stackoverflow. com/users/7626876/xab”> xab ]

Object.values(yourTestObject).every(Boolean)

或者更严格的 没错检查

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

您可以使用 loash 中的 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