我有一个对象数组:
var allButtons = [
buttonA,
buttonВ,
buttonС,
"->"
];
此对象可以隐藏'这可能是真是假。
我需要发现(以最佳方式),是否有任何这样的按钮'隐藏=== false (换句话说,是可见的)。
现在我使用这种原始方法:
someOfButtonsIsVisible = false;
Ext.each(allButtons, function (item){
if(item.hidden === false) {
someOfButtonsIsVisible = true;
}
});
但在这种情况下,我必须检查所有对象,并检查他们的隐藏'属性。
有没有更好的方法来了解数组中的任何对象是否隐藏了=== false?
答案 0 :(得分:2)
使用 array.prototype.some :
var someOfButtonsIsVisible = allButtons.some(button => button.hidden === false);
也可以使用 array.prototype.every :
完成var someOfButtonsIsVisible = !allButtons.every(button => button.hidden === true);
但在你的情况下, array.prototype.some 更有意义
答案 1 :(得分:2)
find()方法返回数组中第一个满足提供的测试函数的元素的值。
查找将遍历您的数组,并在找到所需的值后停止。然后,如果返回值与undefined
不同,则可以测试返回值。
修改:如果您的目标是确定至少有一个(或某个)值是false
,那么array.some()
会更好。如果您的目标是检索与hidden === false
匹配的值,那么array.find()
会更好。
答案 2 :(得分:1)
这是顺序搜索的经典案例。 无论你使用什么,时间复杂度将在O(1)(最佳情况)与O(n)(最坏情况)之间变化。
现在,如果您可以对数组进行排序以便将可见按钮添加到顶部,那么搜索逻辑的时间复杂度将始终为O(1)
注意:在满足条件后打破循环。