Map y Set
Diccionario (Map)
Un diccionario (Map) es una colección que guarda parejas de [clave,valor], los valores son accedidos usando la correspondiente clave. En JavaScript, un objeto podría ser considerado como un tipo de Mapa pero con algunas limitaciones (Sólo con strings y enteros como claves).
La colección Map permite usar cualquier objeto como clave. Creamos la colección usando el constructor new Map(), y podemos usar los métodos set, get y delete para almacenar, obtener o eliminar un valor a partir de su clave.

Al igual que ocurre al asignar un objeto a una variable, array, parámetro de función, etc., cuando usamos un objeto como clave, debemos saber que almacenamos una referencia a ese objeto. Por tanto, se debe usar la misma referencia para acceder a su valor, modificarlo, o para eliminarlo.
La propiedad size devuelve la longitud del mapa y podemos iterar a través por él usando el bucle for..of o el método forEach. En el primer caso, para cada iteración, se devuelve un array con dos posiciones: 0 → key, y 1 → value.
Conjunto (Set)
La colección Set es similar a Map internamente, pero no almacena la parte del valor (sólo la clave). Puede ser visto como una colección que no permite valores duplicados (en un array puede haber valores duplicados). Es una colección bastante simple que solo tiene métodos como add, delete y has, que devuelven un booleano y sirven para almacenar, borrar y comprobar si existe un valor.
Internamente un conjunto no almacena los valores en posiciones marcadas por un índice como el Array. Esto implica, al igual que con la colección Map, que los valores no se tienen por qué recorrer en el orden que se insertaron.
Podemos crear un Set desde un array (lo cual elimina los valores duplicados).