Проверьте, являются ли какие-либо значения ключа ложными в объекте

Вопрос:

Я ищу простое решение, чтобы проверить, есть ли какие-либо значения ключа false в объекте.

У меня есть объект с несколькими уникальными ключами, однако они содержат только логические значения (true или false)

var ob = {  stack: true, 
            overflow: true, 
            website: true 
         };

Я знаю, что могу получить количество ключей в объекте со следующей строкой:

Object.keys(ob).length // returns 3

Существует ли встроенный метод для проверки, является ли какое-либо значение ключа ложным, без необходимости циклически проходить через каждый ключ в объекте?


Решение:

Чтобы проверить, есть ли какие-либо ключи - используйте Array.prototype.some().

// to check any keys are false
Object.keys(ob).some(k => !ob[k]); // returns false

Чтобы проверить, все ли ключи - используйте Array.prototype.every().

// to check if all keys are false 
Object.keys(ob).every(k => !ob[k]); // returns false 

Ответы

Ответ 1

Вы можете использовать Array.some:

var hasFalseKeys = Object.keys(ob).some(k => !ob[k]);

Ответ 2

Вот как бы я это сделал:

Object.values(ob).includes(false);      // ECMAScript 7

// OR

Object.values(ob).indexOf(false) >= 0;  // Before ECMAScript 7

Ответ 3

Вы можете создать функцию стрелки isAnyKeyValueFalse, чтобы повторно использовать ее в своем приложении, используя Object.keys() и Array.prototype.find().

Код:

const ob = {
  stack: true,
  overflow: true,
  website: true
};
const isAnyKeyValueFalse = o => !!Object.keys(o).find(k => !o[k]);

console.log(isAnyKeyValueFalse(ob));