2016-04-13 10 views
5

すべてのプロパティではなく、オブジェクトをlodashでコピーする方法はありますか? 私が知っている唯一の方法は、手動プロパティによってそれにプロパティをコピーしているlodash:ディープコピーオブジェクトですが、すべてのプロパティではありません

が欲しかった例:

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

と結果は次のようになり

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

編集:

: 私は最終的に選択しました
var blacklist = ['a','d']; 
_.cloneDeep(_.omit(obj, blacklist)); 
+1

'pick'と' omit'を調べてください。 – elclanrs

+1

あなた自身で問題を解決した場合は、質問に編集するのではなく、回答として回答してください。必要に応じて、その答えを受け入れることができます。 –

答えて

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

なぜ私の答えの単語をコピーして、それを正しいものとしてマークしましたか? – Chris

+0

@Chris公正であるように、[あなたの答え](https://stackoverflow.com/a/36612253/1430156)は4月14日からのもので、OPはすでにこのコードを書いています。 https://stackoverflow.com/revisions/36604403/2))を4月13日にダウンロードしてから、新しいコメントにスニペットをコピーしてください([コメント投稿者](https://stackoverflow.com/questions/36604403 #comment60825938_36604403))。 –

+0

公正、ちょっと変わっているようです。彼が答えで見つけた何かがあればそれがより正確になるかどうか不思議でした - この質問/回答の将来の読者のために – Chris

2

pick関数:

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

質問のタイトルで示唆されているように、OPが深いコピーを望むと仮定すると、これは実行されません。 –

1

JSON.stringifyには2番目のパラメータを使用できます。

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

あなたはアサインの組み合わせを使用して

を選ぶことができます
Object.assign(copy_obj, _.pick(obj, ['b', 'c'])); 

このように、copy_objに他のプロパティがある場合は、オーバーライドしません。

関連する問題