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

时间:2017-11-23 14:42:14

标签: javascript arrays oop web extjs

我有一个对象数组:

var allButtons = [
    buttonA,
    buttonВ,
    buttonС,
    "->"
];

此对象可以隐藏'这可能是真是假。

我需要发现(以最佳方式),是否有任何这样的按钮'隐藏=== false (换句话说,是可见的)。

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

someOfButtonsIsVisible = false;

Ext.each(allButtons, function (item){
    if(item.hidden === false) {
        someOfButtonsIsVisible = true;
    }
});

但在这种情况下,我必须检查所有对象,并检查他们的隐藏'属性。

有没有更好的方法来了解数组中的任何对象是否隐藏了=== false?

3 个答案:

答案 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)

使用Array.prototype.find()

  

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

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

修改:如果您的目标是确定至少有一个(或某个)值是false,那么array.some()会更好。如果您的目标是检索与hidden === false匹配的值,那么array.find()会更好。

答案 2 :(得分:1)

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

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

注意:在满足条件后打破循环。