ES6阵列理解不再有效吗?

scr*_*key 17 ecmascript-6

以下ES6代码段无效.它曾经是有效的.我仍然可以在旧版本的Traceur中运行它,但最新的Babel和Traceur似乎不再喜欢数组中的for循环了.任何人都可以告诉我为什么它不再有效.

let people = [
    {
        "firstName": "Belinda",
        "phone": "1-607-194-5530",
        "email": "dignsissim.Maecenas.ornare@lacusAliquam.co.uk"
    },
    {
        "firstName": "Elizabeth",
        "phone": "1-155-446-1624",
        "email": "cursus.et.magna@nislsemconsequat.edu"
    }
]

let phones = [for({phone} of people) phone];
console.log(phones)
Run Code Online (Sandbox Code Playgroud)

下面的代码片段是有效的ES6,所以我知道for循环内部的破坏是正常的

for(let {phone} of people) {
  console.log(phone)
}
Run Code Online (Sandbox Code Playgroud)

nik*_*org 27

在BabelJS第6版删除了数组解析.该ES2015规格没有提及内涵的,所以他们很可能被丢弃.通过ES Discuss邮件列表档案的快速搜索在任何确定的内容上都是空洞的.

作为一个稍微冗长的替代方案Object.entries(ES7中的第3阶段特征)和Array.prototype.map.

let emails = people.map(({ email }) => email);
Run Code Online (Sandbox Code Playgroud)

  • 或者:`Array.from(people,({email})=> email);`这将适用于任何可迭代的. (5认同)
  • 为什么`Object.entries`?`people`是一个数组,你想要一个简单的`people.map(_ => _.email)` (3认同)

Dav*_*ton 10

http://exploringjs.com/es6/ch_faq.html#_does-es6-have-array-comprehensions非常有帮助:

最初,ES6具有Array和Generator理解(类似于Haskell和Python).但是他们被推迟到ES6之后,因为TC39想要探索两个途径:

  • 有可能创建适用于任意数据类型的理解(想想微软的LINQ).
  • 迭代器的方法也可能是实现理解的更好方法.

  • 理解为数学意义上的集合构建器是Python的一个惊人特性 - 数学语法与python相当接近,因此对于那些使用与python相同的语法会如此糟糕......它已经在无数项目中得到了进化和测试.当这样一个强大的工具已经运作时,为什么重新发明轮子... (7认同)

Fel*_*ing 7

任何人都可以告诉我为什么它不再有效.

数组理解没有进入ES6的最终版本,它似乎也没有被考虑用于下一个版本:https://github.com/tc39/ecma262