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

时间:2014-03-19 17:09:11

标签: 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){
  //code
}else{
  //other code
}

有更好的方法吗?

4 个答案:

答案 0 :(得分:2)

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

var truthness = array.some(function(element) {
    return element.one;
});

答案 1 :(得分:0)

你正在做的事情可以很好地完成一个小的优化可能是使用while循环。

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

if (i >= 0) {
    //truhness
} else {
    //other code
}

它基本上可以用你可能做得更快的循环来做你所做的。

答案 2 :(得分:0)

您也可以使用Array.some

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

var truth = arr.some(function(elem) {
    return elem.one;
});

来自MDN

  

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

答案 3 :(得分:0)

与您正在做的相同但可能有点整洁(YMMV),您可以使用some来检查是否有任何值为真。 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