2017-11-23 2 views
1

Ich habe ein Array von Objekten:Wie findet man ein Objekt mit einem bestimmten Eigenschaftswert in einem Array?

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

Diese Objekte können die Eigenschaft haben, ‚versteckt‘, die wahr oder falsch sein kann.

Ich muss (in einer optimalen Weise) herausfinden, ob einige dieser 'Tasten' ausgeblendet haben === false (mit anderen Worten, sind sichtbar).

Jetzt benutze ich diese primitive Ansatz:

someOfButtonsIsVisible = false; 

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

Aber in diesem Fall habe ich durch alle Objekte gehen und überprüfen ihre ‚versteckten‘ Eigenschaft.

Gibt es eine bessere Möglichkeit zu wissen, ob eines der Objekte im Array versteckt === false?

Antwort

2

Verwenden array.prototype.some:

var someOfButtonsIsVisible = !allButtons.every(button => button.hidden === true); 

Aber in Ihrem Fall:

var someOfButtonsIsVisible = allButtons.some(button => button.hidden === false); 

Es kann auch mit array.prototype.every erfolgen , array.prototype.some machen mehr Sinn

2

Verwenden Sie Array.prototype.find().

Die Methode find() gibt den Wert des ersten Elements im Array zurück, das die angegebene Testfunktion erfüllt.

Find durchläuft Ihr Array und stoppt, sobald es den gewünschten Wert gefunden hat. Sie können dann den Rückgabewert testen, wenn er sich von undefined unterscheidet.

bearbeiten: Wenn Ihr Ziel ist, wenn mindestens eine (oder etwas) Wert false identitfy ist, dann array.some() besser ist. Wenn Sie den Wert abrufen möchten, der mit hidden === false übereinstimmt, ist array.find() besser.

1

Dies ist ein klassischer Fall der sequentiellen Suche. Egal, was Sie verwenden, die Komplexität variiert zwischen O (1) (bester Fall) und O (n) (schlimmster Fall).

Nun, wenn Sie das Array sortieren, so dass die sichtbaren Tasten nach oben hinzugefügt werden dann die Suchlogik wird immer eine Zeitkomplexität von O (1) haben

Hinweis: bricht die Schleife nach der der Bedingung erfüllt.

Verwandte Themen