Filtern von Objekteigenschaften basierend auf dem Wert

9

Gibt es eine elegante Möglichkeit, falsche Eigenschaften von diesem Objekt mit lodash / unterstreichen herauszufiltern? Ähnlich wie _.compact(array) falsche Elemente aus Arrays entfernt

so von

%Vor%

Zurückgeben

%Vor%     
user3598395 26.03.2015, 15:18
quelle

4 Antworten

15

Vor Lodash 4.0

Sie möchten _.pick , es nimmt eine Funktion als Argument und gibt ein Objekt zurück, das nur die Schlüssel enthält, für die diese Funktion truthy zurückgibt. So können Sie tun:

%Vor%

Oder noch prägnanter:

%Vor%

Lodash 4.0

Lodash 4.0 teilt die Funktion _.pick in _.pick auf, die ein Array von Eigenschaften benötigt, und _.pickBy , die eine Funktion benötigt. So, jetzt wäre es

%Vor%

Oder, da _.pickBy standardmäßig _.identity als zweites Argument verwendet, kann es einfach wie folgt geschrieben werden:

%Vor%     
Retsam 26.03.2015, 20:25
quelle
3

Hier sind zwei Vanille JavaScript-Optionen:

A .: Iterieren Sie über die Objektschlüssel und delete diejenigen, die einen falschen Wert haben.

%Vor%

Siehe Object.keys() und Array.prototype.forEach()

B .: Iteriere über die Objekttasten und füge Truthy-Werte zu einem neuen Objekt hinzu.

%Vor%

Siehe Object.keys() und Array.prototype.reduce()

    
canon 26.03.2015 15:21
quelle
1

Wenn Sie lodash verwenden, würde ich Ihnen Folgendes empfehlen:

%Vor%

Die Funktion pick () generiert ein neues Objekt, das Eigenschaften enthält, für die der Callback truthy zurückgibt . Daher können wir einfach die Funktion identity () als Callback verwenden, da sie nur jeden Eigenschaftswert zurückgibt.

    
Adam Boduch 26.03.2015 20:38
quelle
1

Leider kann ich die obigen Beiträge noch nicht direkt kommentieren, also erstelle ich diesen zusätzlichen Beitrag.

Seit Lodash v4 wurde die oben beschriebene Funktionalität zu _.pickBy verschoben. Mit _.identity als Standard könnten Sie Ihren Code auch ändern zu:

%Vor%

Sehen Sie sich JSBin für ein funktionierendes Beispiel an.

    
Jonas 31.08.2016 13:01
quelle