【问题标题】:Destructuring in a return statement [duplicate]在返回语句中解构[重复]
【发布时间】:2018-10-04 04:57:17
【问题描述】:

我的应用中有多个案例看起来像这样:

  getVariables() {
    const {
      allowCustomValues,
      budgets,
      budgetsToAdd,
      budgetsToRemove,
      isGlobal,
      isRequired,
      name,
      tagTypeId,
      valuesToAdd,
      valuesToDelete,
    } = this.props;

    return {
      allowCustomValues,
      budgets,
      budgetsToAdd,
      budgetsToRemove,
      isGlobal,
      isRequired,
      name,
      tagTypeId,
      valuesToAdd,
      valuesToDelete,
    };
  }

这似乎很麻烦,但更短的解决方案是在我想要的每个变量之前加上this.props.,从维护的角度来看,这并不是更好。

我想要的是这样的:

  getVariables() {
    return this.props.{
      allowCustomValues,
      budgets,
      budgetsToAdd,
      budgetsToRemove,
      isGlobal,
      isRequired,
      name,
      tagTypeId,
      valuesToAdd,
      valuesToDelete,
    };
  }

是否有某种 ES6 语法可以让我使这段代码更干一点?

编辑: 可能是 ES6 destructuring within a return statement 的副本,但该答案有一个无法解决问题的公认答案。

【问题讨论】:

标签: javascript reactjs ecmascript-6 relay


【解决方案1】:

实际上解构不允许这样做。

您正在询问 lodash 的 pick() 的等价物。也许你已经在你的项目中使用了 lodash。如果你不这样做,你仍然可以自己编写这样的帮助程序(但最好使用来自 lodash 或其他库的稳定社区证明的版本)

【讨论】:

  • 嗯,这实际上是一个非常好的答案,因为我们有 Lodash,谢谢!
  • 然而,可能值得注意的是,这种方法不会被 linter 检查,并且由于创建了如此多的字符串文字,效率要低得多。
  • 但这并不完全是 lodash 的 pick(),因为使用 pick 你仍然必须重复自己,同时破坏每个道具 + 将所有道具分配给单个 var。
  • @RegarBoy 不确定 your 的情况,OP 只要求解构对象以返回较小的键子集。当然,如果您需要对每个或某些属性进行额外操作,_.pick 是不够的。
【解决方案2】:

为什么不直接使用Object.assign()

    return Object.assign({}, this.props);

这将构建一个新的空对象,然后将 this.props 中的所有可枚举属性复制到其中。目标对象由Object.assign() 返回,所以它几乎可以完成所有工作。

【讨论】:

    【解决方案3】:

    怎么样

    return {...this.props}

    【讨论】:

    • 如果我不想要所有的道具,只想要特定的道具怎么办?这就是解构的全部意义所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2020-05-28
    • 2014-09-22
    • 1970-01-01
    相关资源
    最近更新 更多