2016-04-13 15 views
5

Gibt es eine Möglichkeit, ein Objekt mit lodash, aber nicht alle Eigenschaften zu kopieren. Der einzige Weg, ich weiß, ist es manuell Eigenschaft durch Eigenschaft Kopierenlodash: Deep Copy Objekt, aber nicht alle Eigenschaften

wollte zB:

var obj = { 
    a: 'name', 
    b: [1,2,3], 
    c: { 
     z: 'surname', 
     x: [] 
    }, 
    d: { 
     y: 'surname2', 
     w: [] 
    } 
}; 

und das Ergebnis wie

sein
var copy_obj = { 
    b: [1,2,3], 
    c: { 
     z: 'surname', 
     x: [] 
    } 
}; 

Edit: ich schließlich entschieden:

var blacklist = ['a','d']; 
_.cloneDeep(_.omit(obj, blacklist)); 
+1

Schauen Sie in "Pick" und "Weglassen". – elclanrs

+1

Wenn Sie das Problem selbst gelöst haben, stellen Sie das bitte als Antwort auf, nicht als Bearbeitung der Frage. Wenn Sie möchten, können Sie diese Antwort akzeptieren. –

Antwort

-4
var blacklist = ['a','d']; 
_.cloneDeep(_.omit(obj, blacklist)); 
+2

Warum hast du meine Antwort Wort für Wort kopiert und als richtig markiert? – Chris

+0

@Chris: Um fair zu sein, [deine Antwort] (https://Stackoverflow.com/a/36612253/1430156) war vom 14. April, während das OP bereits diesen Code schrieb (als [Bearbeiten der Frage] (https://stackoverflow.com/revisions/36604403/2)) am 13. April, bevor wahrscheinlich * dieses * Snippet in eine neue Antwort kopiert wird (wie von [einem Kommentator] vorgeschlagen (https://stackoverflow.com/questions/36604403) # comment60825938_36604403)). –

+0

Fair, scheint nur seltsam. War neugierig, ob es etwas in seiner Antwort gab, das es korrekter macht - für zukünftige Leser dieser Frage/Antwort – Chris

2

Sie könnten dieverwenden 210 Funktion:

_.pick(obj, 'b', 'c') 
+0

Angenommen, das OP möchte eine tiefe Kopie, wie vom Titel der Frage vorgeschlagen, wird dies nicht tun. –

1

Sie können den zweiten Parameter JSON.stringify, dies zu tun.

JSON.parse(JSON.stringify(obj, ['b', 'c'])) 
0

Sie eine Kombination aus zuweisen können und

holen
Object.assign(copy_obj, _.pick(obj, ['b', 'c'])); 

Auf diese Weise, wenn copy_obj andere Eigenschaften hat, überschreiben Sie sie nicht.

Verwandte Themen