2016-11-15 3 views
4

Frage:Prüfen, ob Schlüsselwerte falsch sind in einem Objekt

Ich bin für eine einfache Lösung, um zu überprüfen, ob jeden Schlüsselwert false in einem Objekt ist.

Ich habe ein Objekt mit mehreren eindeutigen Schlüsseln sie jedoch nur Boolesche Werte enthalten (true oder false)

var ob = { stack: true, 
      overflow: true, 
      website: true 
     }; 

Ich weiß, dass ich die Anzahl der Schlüssel in einem Objekt zu bekommen, mit der folgenden Zeile :

Object.keys(ob).length // returns 3 

gibt es ein in Einbau zu überprüfen, ob eine beliebige Taste Wert durch jeden Schlüssel in einer Schleife, ohne dass in dem Objekt falsch ist?


Lösung:

Um zu überprüfen, ob jede Tasten - Array.prototype.some() verwenden.

// to check any keys are false 
Object.keys(ob).some(k => !ob[k]); // returns false 

Um zu überprüfen, ob alle Tasten - Array.prototype.every() verwenden.

// to check if all keys are false 
Object.keys(ob).every(k => !ob[k]); // returns false 

+0

Kurze Antwort Nein, Sie Schleife haben, und Looping nicht wesentlich Last zu Ihrer Seite hinzufügen, so dass ich nicht sehen, warum Sie es nicht –

+0

verwenden können "Ohne Schleife durch jeden Schlüssel im Objekt" vielleicht, aber es ist schwieriger .... – Feathercrown

+0

Denken Sie über Dinge wie 'Array.map()' "Schleifen" nach? – BadZen

Antwort

10

können Sie die Array.some Methode verwenden:

var hasFalseKeys = Object.keys(ob).some(k => !ob[k]); 
+0

Sie könnten auch 'Object.values' verwenden – Florent

+0

@Florent - Yep - aber das allgemeine Logik wird immer noch die gleiche sein - holen Sie sich die Werte, überprüfen Sie sie mit 'Some' oder' Every' – tymeJV

+0

Gibt es eine ähnliche Methode um zu überprüfen, ob/alle/Keys falsch sind? –

0

Sie isAnyKeyValueFalse eine Funktion erstellen können, ist es in Ihrer Anwendung wiederverwendet werden, Array#find() verwenden, das das erste Element in dem Array zurückgibt, erfüllt die bereitgestellte Testfunktion.

Er gibt false zurück, wenn keine Objekteigenschaft false ist, und gibt true zurück, wenn eine Eigenschaft false ist.

Code:

var ob = { 
 
    stack: true, 
 
    overflow: true, 
 
    website: true 
 
}; 
 

 
function isAnyKeyValueFalse(obj) { 
 
    return Object.keys(obj).find(key => !obj[key]) ? true : false; 
 
} 
 

 
console.log(isAnyKeyValueFalse(ob));

+1

forEach ist eine schlechte Wahl, da es alle Schleifen durchlaufen muss. Keine Notwendigkeit, alle zu durchlaufen, wenn eine gefunden wird. Es funktioniert, nur ineffizient. – epascarello

+0

@epascarello, können Sie jetzt bitte überprüfen .. Verbesserte den Code mit 'Array # find()' –

Verwandte Themen