Legen Sie alle Objekt-Schlüssel auf false
Können sagen, ich habe ein Objekt
filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
Möchte ich alle Tasten auf false (neu). Was ist der beste Weg, dies zu tun, würde ich mag, um Schleifen zu vermeiden, die mit foreach
und so Zeug. Jede ordentlich ein liner?
- danke, bitte Schreibe eine Antwort!
- Wie wäre es damit,
filter: {}
hätten Sie behandelt diefilter
für das gleiche?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung von lodash,
mapValues
ist eine anmutige, loop-freien Weg:Wenn Sie wollen, erledigen Sie dies mit Underscore.js gibt es einen entsprechenden, aber mit einem etwas anderen Namen:
In jedem Fall, den Wert von
filter
gesetzt werden:true
zu einer Zeit. Aber unabhängig davon, wie viele es sind,_.keys(filter).filter(k => filter[k])
wird Ihnen eine schnelle array aller Schlüssel auf Werte, die truthy. Sie können genaue äquivalenz zutrue
wenn Sie möchten, dass streng Boolean. Und Sie können immer index das resultierende array zu bekommen das erste:_.keys(filter).filter(k => filter[k])[0]
. Das gibtundefined
wenn es keine gibt. Sorry für die drei Instanzen der "filter" in diesem Ausdruck, aber die variable name überlastungen der name der Funktion._.find(_.keys(filter), k => filter[k])
. Es funktioniert ähnlich, aber etwas kürzer.Nun, hier ist ein one-liner mit vanilla JS:
Es tut, verwenden Sie eine implizite-Schleife mit der
.forEach()
Methode, aber du musst eine Schleife die eine oder andere Weise (es sei denn, Sie zurücksetzen, indem Sie ersetzen das gesamte Objekt mit einer fest codierten Standard-Objekt-literal).function() {}
. Nur ein wenig weniger eingeben.Wenn Sie nicht mit dem ES6, hier ist es ES5-Pendant.
hasOwnProperty verwendet werden muss
``
``
Eine kleine Zeile code, die mit allen Browsern kompatibel:
Den Fall, Sie sind den Umgang mit 'scope' - Variablen, dieser könnte eine bessere Lösung sein.
Mit ES6-features one-liner ohne mutation: