【问题标题】:Is it possible in JS to assign in one line destructured object keys to another object? [duplicate]在 JS 中是否可以在一行中将解构的对象键分配给另一个对象? [复制]
【发布时间】:2022-01-24 22:55:52
【问题描述】:

我的问题很简单,但我一直没能找到答案。

目前我有这个:

const {email, firstname, lastname, isAdmin} = decodeToken(token);
const user = {email, firstname, lastname, isAdmin};

我正在寻找一种将这段代码缩短为一行的方法。我尝试了不同的组合,但都没有奏效。

【问题讨论】:

  • 1.创建一个函数。 2.重复使用它。 3. 完成 - 无论您在哪里使用,它都很简短。\
  • 你真正想要的是解构。不要使用解构
  • 如果您使用的是 lodash,_.pick(decodeToken(token), ['email', 'firstname', 'lastname', 'isAdmin']) 可以解决问题。
  • 如果不使用辅助函数,您无法避免输入两次变量名。如果“问题”是这两行,虽然我不明白为什么会这样,您可以使用const {email, firstname, lastname, isAdmin, user={email, firstname, lastname, isAdmin}} = decodeToken();,但我仅将其作为技术解决方案发布。不是应该真正使用的。你有两行很好理解。

标签: javascript ecmascript-6 destructuring


【解决方案1】:

我认为你可以简单地写:

const user = {email, firstname, lastname, isAdmin} = decodeToken(token);

因此,您可以将user 对象和解构字段作为范围内的变量进行访问。

更新

正如@VLAZ 在评论中指出的那样,这段代码要小心,解构的变量现在是全局的。 您仍然可以避免这种情况,但不能按照您的要求将其放在一行中:

let email, firstname, lastname, isAdmin;
const user = {email, firstname, lastname, isAdmin} = decodeToken(token);

如果您不需要解构字段,您可以进一步缩短:

const user = decodeToken(token);

【讨论】:

  • "我认为你可以简单地写:" 它也会使 emailfirstnamelastnameisAdmin 成为隐式全局变量。
  • 所以你更新的代码,就像OP一样。两行,你刚刚将decodeToken 移到了第二行。
  • 解释除外。
  • @MarioSantini 抱歉,如果这听起来很激进。我只是指出 sn-p 与 OP 代码相同。
猜你喜欢
  • 2020-10-13
  • 2020-11-10
  • 2018-05-26
  • 2017-01-25
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
相关资源
最近更新 更多