2016-02-26 4 views
20

ES6では、JavaScriptには適切なMapオブジェクトがあります。 ArrayやObjectのように、リテラル表記を使用する方法はありません。私はそれを逃しているのだろうか、それとも存在しないのだろうか?JavaScriptにはマップリテラル表記がありますか?

アレイ:var arr = ["Foo", "Bar"];

オブジェクト:var obj = { foo: "Foo", bar: "Bar" };

マップ:???

+1

関連する:[JavaScriptにセットリテラルがありますか?](0120-18753-0218196) –

答えて

21

いいえ、ES6には、Map秒またはSet秒のリテラル表記がありません。

あなたは反復可能(リテラル通常、アレイ)を渡して、そのコンストラクタを使用する必要があります:

var map = new Map([["foo", "Foo"], ["bar", "Bar"], …]); 

var set = new Set(["Foo", "Bar", …]); 

(存在言語に新しいリテラル構文を追加するためのいくつかの提案があるが、どれもES6にそれをしなかったし、私は個人的に将来のバージョンにすると確信していません)。

+1

Worked great!しかし、私のような不注意な読者には、すべてのキー値配列を配列にカプセル化してください。その余分な括弧をスキップして、厄介なTypeErrorを得ました。 –

6

HashMapのようなものです。文字通りのバージョンはありません。コンストラクタのように定義する必要があります。

マップリテラルについて説明するthis topicを読むことができます。なぜマップリテラルを追加する必要があるのですか?これは基本的にMapリテラルの潜在的な提案です。私は個人的にはES7の文字通りの構文を見送ることはできません。マップはそのまま使用するのが簡単だからですが、将来の提案では構文的な砂糖を適用することができます。

const myMap = Map#{expression("derp"): value("herp")}; 
+0

興味深いリンク。私は、新しい構文の作成に伴う複雑さのいくつかを実現していませんでした。私はBergiの答えを選んだのですが、それは私の質問に完全に答えて、あなたの前にちょうど入ったからです。しかし、ありがとう! – Matt

2

我々はリテラル

const fruits = new Map(Object.entries({apples: 1, bananas: 2}))

で行うようにそれを行うための方法は、あります:

潜在的なリテラル表記の例は、のようなものを見てoctothorp(ハッシュ)を使用して議論されました

関連する問題