2015-11-23 15 views
12

以下のES6コードスニペットは無効です。以前は有効でした。私はまだTraceurの古いバージョンで実行することができますが、最新のBabelとTraceurは、もはや配列のforループが気に入らないようです。それはもはや有効ではない理由を誰にでも教えてもらえますか?ES6アレイの解説はもはや有効ではありませんか?

let people = [ 
    { 
     "firstName": "Belinda", 
     "phone": "1-607-194-5530", 
     "email": "[email protected]" 
    }, 
    { 
     "firstName": "Elizabeth", 
     "phone": "1-155-446-1624", 
     "email": "cursu[email protected]" 
    } 
] 

let phones = [for({phone} of people) phone]; 
console.log(phones) 

以下のスニペットは、私はそれがもはや有効である理由のために、ループ内の消滅が

for(let {phone} of people) { 
    console.log(phone) 
} 
+3

/ES2015 –

答えて

18

配列内包はremoved in BabelJS version 6ました。 ES2015 Specificationには解説は記載されていないので、おそらく中止されたでしょう。 ES議論のメーリングリストのアーカイブを使ったクイック検索は、何か決定的に空になった。

もう少し冗長な方法として、Object.entries(ES7にstage-3の機能)とArray.prototype.mapがあります。

let emails = people.map(({ email }) => email); 
+4

また、 'Array.from(people、({email})=>電子メール);'これは任意の反復可能関数で動作します。 – loganfsmyth

+3

なぜ 'Object.entries'ですか? 'people'は配列で、単純な' people.map(_ => _.email) 'が必要です。 – Bergi

+1

ありがとう@bergi。私は本当に言うことができません。なんらかの理由で私の疲れた目は人を対象にしました。スニペットを更新しました。 –

7

OKです誰かが私に言うことはできません知っている有効ES6です。

配列内包はES6の最終版にそれをしなかったし、次のバージョンのいずれかのために考慮されていないようです:https://github.com/tc39/ecma262

9

http://exploringjs.com/es6/ch_faq.html#_does-es6-have-array-comprehensionsが有用である:

もともと、ES6は、Arrayとジェネレータ内包 (同様にハスケルとPythonに)を有することでした。

  • 任意のデータ型 (マイクロソフト社のLINQを考える)のために働く内包表記を作成することも可能である:TC39は、2つの道を探求したかったので、しかし、彼らは、 ES6後まで延期されました。
  • イテレータの方法は、理解度を達成するためのより良い方法です。
  • [配列内包](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions)だ、それはES6に上陸したことはありません実験の提案だ
+3

数学的な意味でのセットビルダーとしての理解は、Pythonの驚くべき特徴です - 数学的構文はPythonのものにかなり近いですから、Pythonと同じ構文を使用することについては悪いことでしょう...それは進化し、無数にテストされていますプロジェクト。このような強力なツールが既に機能しているときに、なぜホイールを再発明するか... –

関連する問題