2017-12-28 3 views
3

Ich habe ein Array wie folgt aus:Array.every() prüfen, ob Werte falsch sind

myArray = {firstValue: false, secondValue: false, thirdValue: true, forthValue: false}; 

Ich möchte überprüfen, ob jeder Wert falsch ist, wenn ja, etwas zu tun. Beispiel:

myArray.every(x => x==false) 
    //do something 

Ist das der richtige Weg, es zu tun? oder eine Funktion muss bestanden werden?

+0

Sie übergeben eine Funktion ... Sie können jedoch '===' verwenden. – elclanrs

+5

Ihr Array ist eigentlich ein 'Objekt' und kein' Array'. Sie können '.every()' nicht für Objekte verwenden. –

Antwort

3

Zuerst. Es ist kein Array, es ist ein Objekt. Wenn Sie überprüfen möchten, ob alle Werte false sind, können Sie die Schlüssel über Object#keys abrufen und dann Array#every für dieses Array verwenden.

const obj = {firstValue: false, secondValue: false, thirdValue: true, forthValue: false}; 
 

 
const allFalse = Object.keys(obj).every(key => obj[key] === false); 
 

 
console.log(allFalse);

Wenn Sie ES8 verwenden, können Sie auch arbeiten mit Object#values

const obj = {firstValue: false, secondValue: false, thirdValue: true, forthValue: false}; 
 

 
const allFalse = Object.values(obj).every(value => value === false); 
 

 
console.log(allFalse);

+1

Wäre es nicht besser, 'Object.values' zu verwenden? – Andy

+0

Ich denke du meinst "wenn alle ** Werte ** sind" falsch "" – Barmar

+0

@Andy wird auch diese Variante hinzufügen –

2

Sie kein Array haben, haben Sie ein Objekt

Kann Object.values ​​() verwenden, um das Array von Werten zu erstellen

Object.values(myArray).every(x => x===false) 

Hinweis iteriert wird polyfill müssen, wenn in Legacy mit Browsern

+0

Ah, vielen Dank !!! –

0

ich tun würde:

!Object.values(myArray /*?*/).reduce((a,b) => a || b); 
+0

Leider verlieren Sie den Kurzschlussvorteil mit '.every' oder' .some'. –

+0

@rock star [nun, es ist noch schneller;)] (http://jsben.ch/Nz2X7) –

+0

Hmm ... ich bin skeptisch. Die Ergebnisse drehen sich hin und her, während ich den Test in Firefox erneut durchführe. Logischerweise sollten die Kurzschlussversionen schneller sein, aber das ist niemals eine Garantie. Bei kurzen Sets wird es sicherlich keinen Unterschied machen. Auf einmal groß, würde ich auf jeden Fall früh anhalten wollen. –

0

Neben dem Verwenden Sie Array#every, können Sie Array#some verwenden und den logical NOT ! Wert davon verwenden, indem Sie Boolean als Rückruf verwenden.

if (!Object.values(myObject).some(Boolean)) { 
    //... 
} 
+0

Dies ist auch ein guter Weg, obwohl die Verwendung des eingebauten 'Boolean' seit Pfeilfunktion weniger attraktiv ist, da' .some (b => b) 'kürzer ist und das gleiche Ergebnis hat. –

Verwandte Themen