【问题标题】:Object property assignment with destructuring?带有解构的对象属性分配?
【发布时间】:2016-02-17 23:40:58
【问题描述】:

我想使用ES6 destructuring 来分配对象的属性,但不知道语法。

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 而创建的新对象。

【问题讨论】:

  • 这在我看来不像是解构,你可能只是克隆了该项目。
  • 这不是stackoverflow.com/questions/25553910/…的重复;该问题不是要为一个对象分配另一个对象的属性子集,而是要从另一个对象的属性子集创建新对象。我将编辑我的问题以澄清这一点。
  • @MinusFour 我不能只克隆或Object.assign(),因为我不想要src 的所有属性。在我的示例中,请注意我将留下 c: 'baz'

标签: javascript variable-assignment ecmascript-6


【解决方案1】:

我认为您将不得不重复dst

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

【讨论】:

  • 我试过这个,但周围没有括号。这导致了语法错误——我现在明白这是因为解构赋值被解释为对象文字。谢谢!
  • 我已经在节点 v5.6 中使用 --harmony_shipping 进行了尝试,但它似乎不起作用 - “分配中的左侧无效”
  • @Alnitak:V8 不支持所有的 ES6。在 Firefox 中工作。
【解决方案2】:

IMO 最干净的方法如下:

const dist = {a: 'foo', b: 'bar', c: 'baz'};

const {a, b} = dist;

const src = {a, b};

运行codepen中的示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    相关资源
    最近更新 更多