Возвращает логическое значение true, если объект содержит ключ true, а не возвращает значение - PullRequest
0 голосов
/ 27 ноября 2018

Я действительно застрял в том, как вернуть простое значение true / false, если мой объект содержит ключ с истинным значением.Я не хочу вернуть сам ключ или значение, просто утверждение, что оно содержит истинное значение.

Например,

var fruits = { apples: false, oranges: true, bananas: true }

Существует истинное значение вэтот объект.Мне все равно, какой из них является истинным ... Я просто хочу иметь возможность вернуть true, потому что есть истинное значение.

Мое текущее решение возвращает ["oranges", "bananas"] не true

Object.keys(fruits).filter(function(key) {
    return !!fruits[key]
})

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Попробуйте с помощью Array.prototype.some () :

Метод some() проверяет, прошел ли хотя бы один элемент в массиве тест, реализованный предоставленной функцией.

var fruits = { apples: false, oranges: true }
var r = Object.keys(fruits).some(function(key) {
    return !!fruits[key]
})
console.log(r);

Хотя вместо Object.keys() лучше использовать Object.values ​​() для итерации объектов value напрямую:

Метод Object.values() возвращает массив значений собственного перечисляемого свойства данного объекта в том же порядке, что и в цикле for...in (разница в том, что for-inцикл перечисляет свойства и в цепочке прототипов).

var fruits = { apples: false, oranges: true }
var r = Object.values(fruits).some(f => f)
console.log(r);
0 голосов
/ 27 ноября 2018

Вы можете проверить с помощью Boolean в качестве обратного вызова для Array#some.

const has = o => Object.values(o).some(Boolean);

var a = {},
    b = { oranges: true, apples : false },
    c = { oranges: false, apples : false };

[a, b, c].forEach(o => console.log(has(o)));
0 голосов
/ 27 ноября 2018

Вы можете использовать Object.values (ключи здесь не важны), чтобы создать массив значений объектов для подачи в Array.some(), который проверяет, возвращает ли какой-либо из элементов true при передаче в функцию параметра:

var fruits = { apples: false, oranges: true, bananas: true };

console.log(Object.values(fruits).some(e => e === true));

Если Object.keys разрешено, но Object.values и some не разрешено:

var fruits = { apples: false, oranges: true, bananas: true };

console.log(Object.keys(fruits).reduce((a, e) => a || fruits[e] === true, false));

Если у вас нет доступа к что-либо , вы всегда можете написать функцию для перебора ключей, чтобы найти конкретное целевое значение (дляоставьте функцию многоразовой для других целей, кроме true):

function contains(obj, target) {
  for (var key in obj) {
    if (obj[key] === target) {
      return true;
    }
  }
  
  return false;
}

var fruits = { apples: false, oranges: true, bananas: true };
console.log(contains(fruits, true));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...