2015-11-16 109 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; 

是否有可能使用解构到一个对象分配?什么是正确的语法?

编辑:在我的使用情况下,dst是需要合并src的属性的子集之前就存在很好的对象;它不是一个专门为从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

我用'--harmony_shipping'在节点v5.6中试过这个,它似乎不起作用 - “赋值中的左手边无效” – Alnitak

+0

@Alnitak:V8不支持所有的ES6。适用于Firefox。 – Ryan