【问题标题】:construct obect property using deconstruct on other object在其他对象上使用解构来构造对象属性
【发布时间】:2018-05-08 07:05:50
【问题描述】:

我可以使用解构来动态构建对象吗? 就像我tokenthis.request.body.token 下一样, 如何获取值并将其分配给对象属性?试过下面的例子它不起作用:

const params = {
    token
} = this.request.body

console.log(params.token) //undefined

我必须这样做

const reqBody = this.request.body

const params = {
  token: reqBody.token
}

console.log(params.token) //123

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

在解构时使用冒号分配给一个名称与属性名称不同的独立变量:

const obj = { request: { body: { token: 'abc' } } };
// obj is equivalent to the `this` in your code

const { request: { body: reqBody } } = obj;
console.log(reqBody);

如果变量名只是 body 没问题,那就更简单了:

const obj = { request: { body: { token: 'abc' } } };
// obj is equivalent to the `this` in your code

const { request: { body } } = obj;
console.log(body);

【讨论】:

  • 我想我会坚持我以前的方式,这太难读了,顺便说一句,谢谢你的回答!
  • 学习新的简洁语法是一件的事情——不要害怕使用它,它有它的位置。
  • 箭头函数既不是你第一次遇到它们,for 循环也不是,许多其他语法结构也不是,但不要让这阻止你学习它们 - 它们是有用,一旦你了解它们,你就会在适当的时候使用它们,并因此变得更快乐。
【解决方案2】:

如果您要解构的对象有一些标准属性,您可以使用object rest 省略来做到这一点:

const thisRequestBody = {
  a: 'a', 
  b: 'b',
  token: 'token'
}

const { a, b, ...params } = thisRequestBody;

console.log(params);

【讨论】:

  • this.request.body 是前端发送的参数,不要认为应该传播它
  • 它是静止的而不是散布的,它会根据您没有明确解构的所有属性创建一个对象。
  • 为什么不只是const { ...params } = thisRequestBody
  • 因为params 将包含您不需要的属性(示例中为ab)。
猜你喜欢
  • 1970-01-01
  • 2018-06-11
  • 2011-10-22
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
  • 2017-12-15
相关资源
最近更新 更多