如果对象包含真键,则返回布尔真值,而不返回该值

时间:2018-11-27 15:42:29

标签: javascript object filter

如果我的对象包含具有真值的键,我真的很想如何返回简单的true / false。我不是要返回键或值本身,只是断言它确实包含一个真值。

例如

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

此对象中有一个真值。我不在乎哪一个是正确的...我只想能够返回true,因为它有一个真实的值。

我当前的解决方案返回["oranges", "bananas"]而不是true

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

4 个答案:

答案 0 :(得分:2)

您可以使用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.valuessome

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

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

如果您无权访问任何内容,则始终可以编写一个函数来遍历键以找到特定的目标值(以使该函数可用于除{{1 }}):

true

答案 1 :(得分:1)

尝试使用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.values()来迭代对象 value 而不是Object.keys()

  

Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for...in循环所提供的顺序相同(区别是for-in循环枚举了原型链)。

var fruits = { apples: false, oranges: true }
var r = Object.values(fruits).some(f => f)
console.log(r);

答案 2 :(得分:1)

您想知道是否有任何值是true

Object.values(fruits).includes(true)

答案 3 :(得分:0)

您可以使用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)));