从对象中提取并分配给另一个对象时的 ES6 大括号用法

ES6 curly braces usage when extracting from an object and assigning to another object

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

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. 我应该如何提取用户的价值。patron.relation?
  2. 有没有更简洁的写法?

谢谢!

我发现您的代码有一些问题。

  1. patron.relation -> patron 未定义,不能用作键。
  2. 在第二个示例中,使用了 rUser - 我认为您只需要 user.

我对您尝试做的事情的理解本质上是创建一个克隆?如果是这样,你应该可以做这样的事情。

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

或者,使用 Object.assign()

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

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

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

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

您可以 return 您想要的对象,如下所示:

return {firstName, lastName, relation}

How should I extract value of user.patron.relation?

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

Is there a more succint way of writing the above?

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

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