【问题标题】:ES6 destructuring within a return statementES6 在 return 语句中解构
【发布时间】:2017-06-07 05:44:06
【问题描述】:

是否可以在返回对象的同时解构它。 例如,要更改此代码:

const mapStateToProps = ({ newItem }) =>{
  const { id, name, price } = newItem;
  return { id, name, price };
}

这样的:

const mapStateToProps = ({ newItem }) =>{
  return { id, name, price } = newItem;
}

【问题讨论】:

  • 你试过了吗?似乎这比在此处输入问题花费的时间更少。
  • 感谢 Pointy 的帮助回复,是的,我当然试过了,但是 ES6 中有这么多语法糖,我认为可能有正确的方法
  • 你的代码已经可以工作了,不知道你想要什么“正确的做法”。
  • @kfcobrien 好吧,如果您尝试过,发生了什么?这类信息可以帮助人们更多地了解您的问题以及您正在尝试做的事情的具体细节。
  • 它返回一个“id is not defined”错误

标签: javascript ecmascript-6 destructuring


【解决方案1】:

不,这是不可能的。

(免责声明:您的语法有效并且可以进行解构和返回,但它等效于

({ id, name, price } = newItem); // assigns global variables
return newItem;

这可能不是你想要的)

要做你想做的事(我假设是创建一个新对象),你需要使用 object literal (可能使用速记属性表示法)。另见One-liner to take some properties from object in ES 6

const mapStateToProps = ({newItem: {id, name, price}}) => ({id, name, price});

【讨论】:

  • 谢谢,这正是我想要的!!抱歉,我的描述不太清楚:)
  • 不错。所以举个例子,我想分配一个newItem的副本,并且只选择一些道具,我可以在一行中完成:const newItemCopy = (({name, price}) => ({name, price}))(newItem)
  • 如果有人需要关于解构的良好说明,请转到此处:link
【解决方案2】:

在 ES6 中,如果要传递所有 newItem 键,还可以执行以下操作

const mapStateToProps = ({ newItem }) => ({ ...newItem });

【讨论】:

  • 这适用于所有属性都应该返回的情况。但是当需要返回特定的属性时,第一种方法更适合。
  • 如果我没记错的话,这和返回newItem完全一样……
  • 它们不一样,返回 newItem 会返回对原始对象上的 newItem 属性的引用,这会返回一个具有 newItem 具有的属性的新对象。 codepen
【解决方案3】:

有一种方法可以在不重复的情况下做你想做的事。

但这需要使用禁止的js功能;这不再是解构了。

所以我根本不推荐它。

const mapStateToProps = ({ newItem }) =>{
  with (newItem) {
   return { id, name, price };
  }
}

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2017-11-04
    • 2021-12-03
    相关资源
    最近更新 更多