web-dev-qa-db-fra.com

Premier élément d'une carte sur JavaScript ES2015

J'ai un Map comme ceci:

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

Mappeut avoir 1 ou plusieurs éléments. Puis-je obtenir le premier élément par index, sans m.get('key1') et sans boucle d'itérateur?

comme: m.get()[0]

25
Philip Loger

Utilisez la fonction Map.prototype.entries , comme ceci

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

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

Si vous voulez obtenir la première clé, utilisez alors Map.prototype.keys , comme ceci

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

De même, si vous souhaitez obtenir la première valeur, vous pouvez utiliser Map.prototype.values , comme ceci

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

La raison pour laquelle nous devons appeler next() sur les valeurs renvoyées est que toutes ces fonctions retournent itérateurs . En savoir plus sur le protocole d'itération ici .

49
thefourtheye

Pour l'exemple spécifique dont vous vous interrogez, la déstructuration serait parfaite.

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

let [[, obj]] = m;

par exemple.

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

est une option pour déstructurer puis saisir la valeur, mais l'option la plus simple serait

let [obj] = m.values();
11
loganfsmyth

En outre, cela est correct à la fois pour Set et Map: vous pouvez convertir n'importe quoi en Array puis obtenir n'importe quel élément par son index. Quelque chose comme ça:

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

Array.from(m)[0];    // ['key1', {}]
1
KidThePug