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