2017-07-05 7 views
0

Wenn ich eine Karte Instanz erstellen wie folgt:Technischer Grund können wir nicht mit foreach() über Map.prototype.keys iterieren()

let m = new Map() 

Ich kann nicht iterative darüber Schlüssel ist wie so:

m.keys().forEach() 

warum ist das?

kann ich iterativ über sie wie Schlüssel-Wert-Paare ist so:

m.forEach((v,k) => {}) 

was ist der Grund dafür?

+0

[MDN Map-Tasten()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/Map/keys) * "Die Methode keys() gibt ein ** neues Iterator-Objekt ** zurück, das die Schlüssel für jedes Element im Map-Objekt in Anzeigenreihenfolge enthält." * – epascarello

+0

Sie sollten "m.keys" ausführen können() .each (Funktion (Taste) {}) ' – bradimus

+0

für (Schlüssel von m.keys()) ... –

Antwort

5

Map.prototype.keys() gibt ein Iterator Objekt, keinen Array, die keine .forEach() Funktion in seinem Prototyp hat.

Was Sie tun können, ist jedoch folgendes:

let map = new Map(); 
Array.from(map.keys()).forEach(callback); 

dass das Iterator Objekt in ein Array konvertieren, und Sie können frei die .forEach() Methode verwenden. Alternativ können Sie die Ausbreitung Syntax verwenden das gleiche Ziel zu erreichen:

let map = new Map(); 
let keys = [ ...myMap.keys() ].forEach(callback); 
+0

Ich frage mich, ob Sie einfach '(... myMap.keys()). ForEach()' :) – Olegzandr

Verwandte Themen