2016-02-26 10 views
20

Od wersji ES6 JavaScript ma prawidłowy obiekt Map. Nie widzę sposobu na użycie zapisu dosłownego, tak jak w przypadku tablicy lub obiektu. Czy tęsknię za tym, czy nie istnieje?Czy JavaScript posiada notację literową na mapie?

Array: var arr = ["Foo", "Bar"];

obiektu: var obj = { foo: "Foo", bar: "Bar" };

Mapa: ???

+1

Powiązane: [Czy istnieje literał zestawu w kodzie JavaScript?] (Http://stackoverflow.com/q/35368259/218196) –

Odpowiedz

21

Nie, ES6 nie ma notacji literowej dla Map s lub Set s.

Trzeba będzie korzystać z ich konstruktorów, przepuszczanie iterable (zwykle tablicą dosłowne):

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

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

Istnieją pewne propozycje, aby dodać nową składnię dosłownego do języka, ale nie dostał się do ES6 (i Osobiście nie jestem pewien, czy wejdą do jakiejkolwiek przyszłej wersji).

+1

Pracowałem świetnie! Jednak dla wszystkich nieostrożnych czytelników, takich jak ja: Upewnij się, że wszystkie tablice klucz-wartość są enkapsulowane w tablicy. Pominąłem ten dodatkowy zestaw nawiasów i dostałem paskudnego TypeError. –

6

To jak mapa HashMap - nie ma wersji dosłownej. Musisz zdefiniować to tak, jakbyś był konstruktorem.

Możesz przeczytać this topic, która omawia jednak literały mapy i dlaczego należy je dodać. To w zasadzie inne potencjalne propozycje dotyczące literałów na mapie. Osobiście nie mogę przewidzieć składni literalnej w ES7, ponieważ Mapy są bardzo łatwe w użyciu, jak to jest - ale w przyszłych propozycjach można zastosować cukier syntaktyczny.

Przykładem potencjalnego dosłownym zapisem został omówiony przy użyciu octothorp (hash), aby wyglądać tak:

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

Interesujący link. Nie zdawałem sobie sprawy z niektórych złożoności związanych z tworzeniem nowej składni. Wybrałem odpowiedź Bergiego, ponieważ w pełni odpowiedział na moje pytanie i wszedł w zaledwie minutę przed waszym. W każdym razie dzięki! – Matt

2

Jest sposób, aby to zrobić, jak robimy z literałów

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