2016-04-13 12 views
5

Czy istnieje sposób na skopiowanie obiektu za pomocą programu lodash, ale nie wszystkie właściwości. Jedynym sposobem wiem jest ręcznie kopiując własność mająteklodash: obiekt z głębokim kopiowaniem, ale nie wszystkie właściwości.

chciał np

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

a wynik będzie jak

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

Edit: I w końcu zdecydował się na:

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

Sprawdź w 'pick' i' omit'. – elclanrs

+1

Jeśli sam rozwiązałeś problem, proszę go podać jako odpowiedź, a nie jako odpowiedź na pytanie. Jeśli chcesz, możesz zaakceptować tę odpowiedź. –

Odpowiedz

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

Dlaczego skopiowałeś moje słowo w odpowiedzi na słowo i oznaczyłeś je jako prawidłowe? – Chris

+0

@ Chris: Aby być uczciwym, [Twoja odpowiedź] (https://stackoverflow.com/a/36612253/1430156) był od 14 kwietnia, podczas gdy OP już napisał ten sam kod (jako [edytuj do pytania] (https://stackoverflow.com/revisions/36604403/2) 13 kwietnia, prawdopodobnie przed skopiowaniem * tego * fragmentu do nowej odpowiedzi (zgodnie z sugestią [a commenter] (https://stackoverflow.com/questions/36604403 # comment60825938_36604403)). –

+0

Targi, wydaje się dziwne. Był ciekawy, czy w jego odpowiedzi znalazł się coś, co czyni go bardziej poprawnym - dla przyszłych czytelników tego pytania/odpowiedzi – Chris

2

Można użyć pick funkcja:

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

Założenie, że OP chce głębokiej kopii, jak sugeruje tytuł pytania, nie zrobi tego. –

1

Aby to zrobić, możesz użyć drugiego parametru do JSON.stringify.

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

Można użyć kombinacji przypisać i odebrać

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

W ten sposób, jeśli copy_obj ma inne właściwości, których nie zastąpisz.

Powiązane problemy