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)
注:满足条件后,断开循环