Javascript 检查数组中是否有任何对象的值为true?

Javascript 检查数组中是否有任何对象的值为true?,javascript,Javascript,我有一个数组,看起来像这样: [{one: false,two: 'cat'},{one: true, two: 'dog'},{one: false, two: 'ball'}] 我想检查其中的任何一个值是否为真。我能想到的解决办法是 var truthness; array.forEach(function (element, i, array) { if(element.one){ truthness = true break; } } if(truthness){

我有一个数组,看起来像这样:

[{one: false,two: 'cat'},{one: true, two: 'dog'},{one: false, two: 'ball'}]
我想检查其中的任何一个值是否为真。我能想到的解决办法是

var truthness;
array.forEach(function (element, i, array) {
 if(element.one){
    truthness = true
    break;
 }
}

if(truthness){
  //code
}else{
  //other code
}

有没有更好的方法可以做到这一点?

您正在做的工作将非常有效一个小优化可能是使用while循环

var i = array.length;
while (i--)
    if (array[i].one)
        break;

if (i >= 0) {
    //truhness
} else {
    //other code
}
它基本上与您使用更快的循环所做的一样。

数组有一个方法,如果回调为数组中的任何元素返回
true
,则返回
true
,如果回调为数组中的每个元素返回
false
,则返回
false

var truthness = array.some(function(element) {
    return element.one;
});
您还可以使用:

发件人:

some
对数组中存在的每个元素执行一次回调函数,直到找到回调返回真值的元素为止。如果找到这样一个元素,一些元素会立即返回true。否则,有些返回false。仅对具有赋值的数组的索引调用回调;对于已删除或从未赋值的索引,不会调用它


与您正在做的相同,但可能稍微整洁一点(YMMV),您可以使用它来检查任何值是否为真。
some
的美妙之处在于:

如果找到这样一个元素,一些元素会立即返回true

如果你是为了迎合较老的浏览器,页面底部会有一个多边形填充

var data = [{one: false,two: 'cat'},{one: true, two: 'dog'},{one: false, two: 'ball'}];
var data2 = [{one: false,two: 'cat'},{one: false, two: 'dog'},{one: false, two: 'ball'}];

function oneIsTrue(data) {
  return data.some(function (el) {
    return el.one;
  });
}

oneIsTrue(data); // true
oneIsTrue(data2); // false

不是真的,你必须以任何一种方式进行迭代。像jQuery和underline.js这样的库都有函数来实现这一点,但是如果你不使用它们,那么这就是实现这一点的方法。这里有一种更简洁的方法来编写它->我喜欢这比我的解决方案好得多。
var data = [{one: false,two: 'cat'},{one: true, two: 'dog'},{one: false, two: 'ball'}];
var data2 = [{one: false,two: 'cat'},{one: false, two: 'dog'},{one: false, two: 'ball'}];

function oneIsTrue(data) {
  return data.some(function (el) {
    return el.one;
  });
}

oneIsTrue(data); // true
oneIsTrue(data2); // false