Как узнать, истинны ли все значения объекта 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);