Dies ist eine Frage ähnlich wie Wie unbestimmte und Null-Werte von einem Objekt mit lodash entfernen? . Die dort vorgeschlagenen Lösungen bewahren jedoch den Konstruktor nicht. Außerdem möchte ich nur die Schlüssel löschen, die beginnen, sagen wir mit '_'.
Hier ist, was ich suche, und es scheint nicht zu schaffen, von lodash zu kommen:
Eingabe: new Cons({key1 : 'value1', key2 : {key21 : 'value21', _key22: undefined}, key3: undefined, _key4 : undefined})
Ausgabe:
{key1 : 'value1', key2 : {key21 : 'value21'}, key3: undefined}
wo zum Beispiel function Cons(obj){_.extend(this, obj)}
Ich habe eine Lösung mit omitBy
unter Verwendung von lodash, aber ich verliere die Konstruktorinformation (d. h. ich kann instanceof Cons
nicht mehr verwenden, um den Objektkonstruktor zu unterscheiden). forIn
sah wie ein guter Kandidat für das rekursive Traversal aus, aber es liefert mir nur die value
und die key
. Ich brauche auch den Pfad, um das Objekt zu löschen (mit unset
).
Bitte beachten Sie:
instanceof whatevertheconstructorwas
immer noch wahr Gibt es eine bessere Lösung (mit lodash oder anderen)?
Sie können eine Funktion erstellen, die Schlüssel mithilfe von omitBy () und mapValues () als unterstützende Funktion zum rekursiven Versetzen von Schlüsseln.
Beispiel:
Aktualisieren
Sie können das Objekt selbst mutieren, indem Sie eine Funktion erstellen, die das Objekt rekursiv mit each () durchläuft und die Entfernung um
Sie können das rundef
-Paket verwenden.
Standardmäßig werden alle Eigenschaften der obersten Ebene durch Werte ersetzt, die auf undefined
gesetzt sind. Es unterstützt jedoch die folgenden Optionen:
mutate
- setze dies auf false
, um das gleiche Objekt zurückzugeben, das du angegeben hast; Dadurch wird sichergestellt, dass der Konstruktor nicht geändert wird recursive
- setze dies auf true
, um dein Objekt rekursiv zu bearbeiten Daher können Sie für Ihren Anwendungsfall Folgendes ausführen:
%Vor% Sie können JSON.stringify()
, JSON.parse()
, RegExp.prototype.test()
Haftungsausschluss: Ich habe keine Ahnung, was lodash als eingebaute Funktionen unterstützt, aber das ist sehr einfach mit Vanille Javascript zu implementieren.
Beginnen Sie mit einer generischen Funktion zum Filtern der Schlüssel Ihres Objekts
%Vor%Dann eine Funktion, die basierend auf Ihrem spezifischen Verhalten filtert
%Vor%Dann rufe es auf ein Objekt
%Vor%Dies kann jetzt einfach in Ihren Konstruktor integriert werden
%Vor%BEARBEITEN:
Beim zweiten Gedanken, anstatt eine vollkommen gute Funktion mit impliziter tiefer Rekursion abzuschlachten, könnten Sie die generischen Operationen abstrahieren und eine spezifische "tiefe" Filterfunktion definieren %Vor%
Die Integration in Ihren Konstruktor bleibt gleich
%Vor%Tags und Links javascript lodash