2015-11-16 2 views
3

Я хотел бы использовать ES6 destructuring для назначения свойств объекта, но не могу понять синтаксис.Свойство назначения объекта с деструктурированием?

< = ES5:

var dst = {}; // already in existence, with its own props, methods, etc. 
var src = { a: 'foo', b: 'bar', c: 'baz' }; 
dst.a = src.a; 
dst.b = src.b; 

> = ES6 (мой собственный выдуманный, не-работает синтаксис):

let dst = {}; 
let src = { a: 'foo', b: 'bar', c: 'baz' }; 
dst[{a, b}] = src; 

Можно ли использовать задание на уничтожение того объекта? Какой правильный синтаксис?

EDIT: В моем случае использования, dst является объектом, который существовал задолго до необходимости объединить подмножество свойств src «s; это не новый объект, созданный исключительно для «заимствования» от src.

+0

Это не выглядит так же, как мне уничтожение того, вы могли бы просто клонировали деталь. – MinusFour

+0

Это не дубликат http://stackoverflow.com/questions/25553910/one-liner-to-take-some-properties-from-object-in-es6; этот вопрос не просит о назначении одному объекту подмножества свойств из другого, он просит о создании нового объекта из подмножества свойств из другого. Я отредактирую свой вопрос, чтобы уточнить это. – ericsoco

+0

@MinusFour Я не могу просто клонировать или 'Object.assign()', потому что мне не нужны все свойства 'src'. В моем примере заметьте, что я оставляю «c:» baz''. – ericsoco

ответ

4

Я думаю, что вы будете иметь, чтобы повторить dst:

({a: dst.a, b: dst.b} = src); 
+3

Я пробовал это, но вокруг него не было парнеров. Это вызвало синтаксическую ошибку - теперь я понимаю, что это было потому, что назначение деструктурирования интерпретировалось вместо этого как литерал объекта. Благодаря! – ericsoco

+0

Я пробовал это в узле v5.6 с '--harmony_shipping', и он, похоже, не работает -« Недопустимая левая сторона в назначении » – Alnitak

+0

@Alnitak: V8 не поддерживает все ES6. Работает в Firefox. – Ryan

Смежные вопросы