_.zuweisen, nur wenn die Eigenschaft im Zielobjekt existiert

8

Ich brauche etwas wie eine _.assign, aber nur, wenn die Eigenschaft dem Zielobjekt bereits zugewiesen ist. Stellen Sie sich vor, dass die Quellobjekte einige Eigenschaften haben können, die sie beitragen können, aber auch einige Eigenschaften, die ich nicht mischen möchte.

Ich habe den Callback-Mechanismus von _.assign nie benutzt, aber folgendes versucht. Es hat funktioniert, aber es hat dem dest-Objekt immer noch die Eigenschaft zugewiesen (als undefiniert). Ich will es überhaupt nicht zuordnen.

%Vor%

Ich schrieb die folgende Funktion, um dies zu tun, aber ich frage mich, ob lodash bereits etwas gebacken hat, das eleganter ist.

%Vor%     
sparty02 23.01.2015, 07:16
quelle

3 Antworten

13

Sie könnten nur die Schlüssel vom ersten Objekt

nehmen %Vor%

Nehmen Sie dann ein Teilmengenobjekt vom zweiten Objekt und nehmen Sie nur die Schlüssel, die auf dem ersten Objekt existieren:

%Vor%

Verwenden Sie dann dieses neue Objekt als Argument für _.assign :

%Vor%

Oder in einer Zeile:

%Vor%

Es schien zu funktionieren, als ich es hier getestet habe: Ссылка

    
ne8il 26.01.2015, 14:48
quelle
0

Hier ist eine unveränderliche tiefe Version, ich nenne sie "Zusammenführen, die die Form beibehält", in TypeScript, das lodash verwendet:

%Vor%

Und ein einfacher Test, um zu sehen, wie ich solch eine Zusammenführung sehe, sollte funktionieren:

%Vor%

Ich habe mich im Test selbständig und unwandelbar eingesetzt, aber ich sah keine Notwendigkeit, es in diese Antwort zu schreiben.

Hiermit lege ich dies in die Public Domain.

    
Ciantic 27.03.2016 19:43
quelle
0

Eine andere Möglichkeit, dies zu erreichen, ist die Kombination von _.mapObject mit _.has

%Vor%

Erläuterung:

  1. Alle Schlüssel / Wert-Paare von object1 mit _.mapObject durchlaufen
  2. Mit _.has prüfen, ob der Eigenschaftenname k auch in object2 existiert.
  3. Wenn dies der Fall ist, kopiere den Wert, der dem Schlüssel object2 's k zugewiesen wurde, zurück auf object1 , sonst gib einfach den existierenden Wert von object1 ( v ).
  4. zurück

Plunkr

    
svarog 21.12.2017 15:56
quelle

Tags und Links