【发布时间】:2015-08-19 17:33:50
【问题描述】:
const {name, slug, description, parent} = cat;
const saneCat = {name, slug, description, parent};
在第一个表达式中,我们通过解构一个杂乱的对象来定义四个常量。在第二个表达式中,我们将它们组合成一个新对象。我想在不复制有趣字段列表的情况下一步完成,但因为第一个表达式没有定义对象,这似乎是不可能的。真的吗?我们非常接近 Clojurian 的胜利!
我尝试了以下但没有成功。任何 ECMAScript 编译器都是公平的游戏,但我没有选择只使用 Clojurescript。
const saneCat = {name, slug, description, parent} = cat; // name is not defined
const {...saneCat} = {name, slug, description} = cat; // name is not defined
const saneCat = ({name, slug, description, parent} = cat); // name is not defined
const saneCat = ({name, slug, description, parent}) = cat; // name is not defined
const saneCat = {{name, slug, description, parent}} = cat; // unexpected token
const saneCat = {{name, slug, description, parent}} = {cat}; // unexpected token
【问题讨论】:
-
为什么不使用像
_.pluck(cat, ['name', 'slug', 'description', 'parent'])这样的现有库?解构主要用于将属性提取到可赋值的表达式/变量中。 -
你的意思是
_.pick?以前没用过,谢谢指点。它确实解决了我的例子。我有点希望 ES6 理解和解构结合起来比库更灵活、更简洁,但看起来这两种语言特性并不是为了一起使用而设计的。 -
是的,哇,
_.pick(cat, ['name', 'slug', 'description', 'parent'])。我实际上注意到我打错了,显然忘了修复它? :P 您可以技术上使用解构,但只能以不比当前示例短的方式使用,例如const saneCat = {}; ({name: saneCat.name, slug: saneCat.slug} = cat);但哇,它不可读 -
@Bergi 是的,这是一个 dup,但为什么要指出另一个本身就是一个 dup 的问题?
标签: ecmascript-6 destructuring