Javascript 如何在数组中找到具有特定属性值的对象?

Javascript 如何在数组中找到具有特定属性值的对象?,javascript,arrays,oop,web,extjs,Javascript,Arrays,Oop,Web,Extjs,我有一个对象数组: var allButtons = [ buttonA, buttonВ, buttonС, "->" ]; 此对象可以具有“隐藏”属性,该属性可以为true或false 我需要(以最佳方式)发现这些“按钮”中是否有隐藏===false的(换句话说,是可见的) 现在我使用这种原始方法: someOfButtonsIsVisible = false; Ext.each(allButtons, function (item){ if

我有一个对象数组:

var allButtons = [
    buttonA,
    buttonВ,
    buttonС,
    "->"
];
此对象可以具有“隐藏”属性,该属性可以为true或false

我需要(以最佳方式)发现这些“按钮”中是否有隐藏===false的(换句话说,是可见的)

现在我使用这种原始方法:

someOfButtonsIsVisible = false;

Ext.each(allButtons, function (item){
    if(item.hidden === false) {
        someOfButtonsIsVisible = true;
    }
});
但在这种情况下,我必须检查所有对象并检查它们的“隐藏”属性

是否有更好的方法知道数组中的任何对象是否隐藏===false?

使用array.prototype.some:

var someofbuttonisvisvisible=allButtons.some(button=>button.hidden==false);
也可以使用array.prototype.every执行此操作:

var someOfButtonsIsVisible=!allButtons.every(button=>button.hidden==true);
但在您的情况下,array.prototype.some更有意义

使用array.prototype.some:

var someofbuttonisvisvisible=allButtons.some(button=>button.hidden==false);
也可以使用array.prototype.every执行此操作:

var someOfButtonsIsVisible=!allButtons.every(button=>button.hidden==true);
但在您的情况下,array.prototype.some更适合使用

find()方法返回数组中满足提供的测试函数的第一个元素的值

Find将遍历数组,并在找到所需值后停止。然后,如果返回值与未定义的
不同,则可以测试返回值

编辑:如果您的目标是确定是否至少有一个(或某些)值为
false
,则
array.some()
更好。如果您的目标是检索匹配
hidden===false的值,那么
array.find()
更好。

使用

find()方法返回数组中满足提供的测试函数的第一个元素的值

Find将遍历数组,并在找到所需值后停止。然后,如果返回值与未定义的
不同,则可以测试返回值


编辑:如果您的目标是确定是否至少有一个(或某些)值为
false
,则
array.some()
更好。如果您的目标是检索与
hidden===false
匹配的值,则
array.find()
更好。

这是顺序搜索的典型案例。 无论您使用什么,时间复杂度将在O(1)(最佳情况)到O(n)(最坏情况)之间变化

现在,如果您可以对数组进行排序,以便将可见按钮添加到顶部,那么搜索逻辑的时间复杂度将始终为O(1)


注意:满足条件后中断循环。

这是顺序搜索的一个典型案例。 无论您使用什么,时间复杂度将在O(1)(最佳情况)到O(n)(最坏情况)之间变化

现在,如果您可以对数组进行排序,以便将可见按钮添加到顶部,那么搜索逻辑的时间复杂度将始终为O(1)

注:满足条件后,断开循环