我有一个看似简化的数组:
[{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
}
有更好的方法吗?
答案 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