从对象中提取并分配给另一个对象时使用ES6花括号

时间:2017-11-16 02:03:30

标签: ecmascript-6 curly-braces

我想用花括号替换这段代码:

let rUsers = children.map((user) => {
    let rUser= {};
    rUser.firstName = user.firstName;
    rUser.lastName = user.lastName;
    rUser.relation = user.patron.relation;
    return rUser;
 });

这就是我所拥有的:

let rUsers = children.map((user) => {
    let rUser = {};
    ({
        firstName: rUser.firstName,
        lastName: rUser.lastName,
        patron.relation: rUser.relation, // I get an error here
    } = user);
    return rUser;
}

除了patron.relation,其余的提取工作。

问题:

  1. 我应该如何提取user.patron.relation的价值?
  2. 是否有一种更为简洁的方式来编写上述内容?
  3. 谢谢!

3 个答案:

答案 0 :(得分:1)

您可以像这样使用对象解构:

const {firstName, lastName, patron: {relation}} = user

并且relation已设置为user.patron.relation的值。

您可以返回您想要的对象:

return {firstName, lastName, relation}

答案 1 :(得分:1)

  

我应该如何提取user.patron.relation的价值?

您可以使用{ … patron: {relation: rUser.relation}, … }作为解构目标。

  

是否有一种更为简洁的方式来编写上述内容?

如果属性名称与there's not much you can do不匹配,但在您的特定情况下,您可以通过将参数解构为多个变量来简化:

const rUsers = children.map(({firstName, lastName, patron: {relation}}) => 
    ({firstName, lastName, relation})
);

答案 2 :(得分:0)

我发现你的代码有些问题。

  1. patron.relation - > patron未定义,且无法用作密钥。
  2. 在第二个示例中,使用了rUser - 我想您只想user
  3. 我对你尝试做什么的理解基本上创造了一个克隆?如果是这样,你应该可以做这样的事情。

    let rUsers = children.map(user => {
        firstName: user.firstName,
        lastName: user.lastName,
        relation: user.relation
    });
    

    或者,使用Object.assign()

    可能更简单
    let rUsers = children.map(user => Object.assign({}, user));