2016-02-26 23 views
20

ES6'dan itibaren, JavaScript'in uygun bir Map nesnesi var. Bir Array veya bir Object ile olabildiğince, bir literal gösterimi kullanmanın bir yolunu görmüyorum. Onu özlüyorum mu yoksa yok mu?Javascript bir harita hazırlamasında var mı?

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

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

Haritası: ???

+1

İlgili: [JavaScript'te bir Set hazırlayıcısı var mı?] (Http://stackoverflow.com/q/35368259/218196) –

cevap

21

Hayır, ES6'nın Map s veya Set s için bir tamsayı notasyonu yoktur.

Sen (tipik olarak bir dizi değişmezi) bir iterable geçen kendi kurucular kullanmak zorunda olacak:

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

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

dile yeni değişmez sözdizimini eklemek için bazı teklifler var, ama hiçbiri ES6 haline getirdiler (ve Ben şahsen, gelecekteki herhangi bir versiyona gireceklerinden emin değilim).

+1

Harika çalıştı! Ancak benim gibi tüm dikkatsiz okuyucular için: Tüm anahtar-değer dizilerini bir diziye dahil ettiğinizden emin olun. Bu ekstra parantezin üzerinden atladım ve kötü bir TypeError aldım. –

6

Bu bir HashMap gibi - bir değişmez sürüm yoktur. Bunu bir kurucu gibi tanımlarsınız.

this topic numaralı kitabı okuyabilir, ancak harita hazır bilgilerinin neler olduğunu ve neden eklenmeleri gerektiğini tartışabilirsiniz. Temel olarak harita edebi yollarla ilgili potansiyel teklifler. Kişisel olarak ES7'de bir sözel sözdizimini öngöremiyorum çünkü Haritalar çok kolay olduğu gibi kullanılabiliyor - ancak gelecekteki tekliflerde sözdizimsel şeker uygulanabiliyordu.

potansiyel değişmez gösterimde bir örnek şuna benzer bir octothorp (karma) kullanılarak görüşüldü: Biz değişmezleri ile yaptığımız gibi bunu yapmanın bir yolu vardır

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

İlginç bağlantı. Yeni sözdizimini oluşturmaya dahil olan bazı karmaşıklıkları fark etmemiştim. Bergi'nin cevabını seçtim, çünkü sorumu tamamen cevapladı ve sizden sadece bir dakika önce geldi. Yine de teşekkürler! – Matt

2

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

İlgili konular