2015-09-03 15 views
9

Mam Map takiego:Pierwsza pozycja z mapy na JavaScript ES2015

const m = new Map(); 
m.set('key1', {}) 
. 
m.set('keyN' {}) 

Map może mieć 1 lub wiele elementów. Czy mogę uzyskać pierwszy element według indeksu, bez m.get('key1') i bez pętli iteratora?

jak: m.get()[0]

+1

Dlaczego chcesz to zrobić? Mapy są nieuporządkowane. – helpermethod

+1

Zasadniczo, pierwszy element na mapie nie jest potrzebny, pierwszy dodany, więc można tylko przeglądać całą mapę. – Andrey

+4

@Andrey z Mozilla MDN: "Mapa iteruje swoje elementy w kolejności wstawiania, podczas gdy kolejność iteracji nie jest określona dla obiektów." https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map –

Odpowiedz

27

Użyj funkcji Map.prototype.entries, jak to

const m = new Map(); 
m.set('key1', {}) 
m.set('keyN', {}) 

console.log(m.entries().next().value); // [ 'key1', {} ] 

Jeśli chcesz zdobyć pierwszy klawisz, a następnie użyć Map.prototype.keys, tak

console.log(m.keys().next().value); // key1 

Podobnie, jeśli chcesz uzyskać pierwszą wartość, a następnie można użyć Map.prototype.values, jak to

console.log(m.values().next().value); // {} 

powód, dla którego trzeba zadzwonić next() na zwracanych wartości jest fakt, że wszystkie te funkcje zwracają iterators . Przeczytaj więcej na temat protokołu iteracji here.

+2

Jakiś powód, dla którego zmieniono klucze ''keyN'', których używał OP? – Bergi

5

Dla konkretnego przykładu, o który się zastanawiasz, destruyfikacja byłaby doskonała.

let m = new Map(); 
m.set('key1', {}); 
m.set('key2', {}); 

let [[, obj]] = m; 

np.

let [pair] = m; 
let [key, obj] = pair; 

jest jedną z opcji, aby destructure a następnie pobieramy wartość, ale łatwiej rozwiązaniem byłoby

let [obj] = m.values(); 
+0

Może "[obj,] =' jest bardziej jasne – Bergi

1

też, że jest poprawny zarówno Set i Map: można przekonwertować niczego do Array a następnie uzyskać dowolny element według indeksu. Coś takiego:

let m = new Map(); 
m.set('key1', {}); 
m.set('key2', {}); 

Array.from(m)[0]; // ['key1', {}] 
Powiązane problemy