Как узнать, истинны ли все значения объекта 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 элементами внутри него, и вам нужно будет знать, все ли они истинны.

Ответ 1

Как насчет чего-то типа:

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

    

Ответ 2

В современных браузерах:

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

Если вы действительно хотите проверить true вместо правды:

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

Ответ 3

С ES2017 Object.values() жизнь еще проще.

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

Еще более короткая версия с функцией Boolean() [спасибо xab]

Object.values(yourTestObject).every(Boolean)

Или с более строгими проверками

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

Ответ 4

Самый быстрый способ - это цикл

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

Это зациклирует все значения в массиве, затем проверяет, является ли это значение ложным, и если оно будет тогда, оно установит переменную fail, ведь вам скажут, что тест завершился неудачно.

Ответ 5

С реализацией lodash:

var myObj = {a: true, b: true, c: undefined};
_.every(_.values(myObj), (value) => value == true);