Map

Resum

L'objecte Map 茅s un simple mapa de parelles clau/valor. Qualsevol valor (tant objectes com primitive values) poden fer-se servir tant com a clau com a valor.

Sintaxi

new Map([iterable])

Par脿metres

iterable
Iterable 茅s un Array o un altre objecte iterable els quals els seus elements s贸n parelles clau/valor (Arrays de 2 elements). Cada parella clau/valor ser脿 afegida al nou mapa. nul 茅s tracta com a indefinit.

Descripci贸

Un objecte Map pot iterar els seus elements en ordre d'inserci贸 - un bucle for..of retornar脿 un array de [key, value] per cada iteraci贸.

Igualtat de claus

La igualtat de claus es basa en l'algorisme "mateix valor": NaN es considera igual a NaN (tot i que NaN !== NaN) i tots els altres valors es consideren iguals d'acord amb la sem脿ntica de l'operador ===. En versions anteriors a l'esborrany de l'ECMAScript 6 -0 i +0 es consideraven diferents (tot i que -0 === +0), aquest comportament s'ha canviat en versions posteriors i ha sigut adaptat al (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (errada 952870) i una versi贸 di脿ria de Chrome.

Comparaci贸 d'objectes amb mapes

Els Objects son similars als Maps en el sentit que tots dos permeten assignar valors a claus, obtenir aquests valors, esborrar claus i detectar si una clau t茅 un valor assignat o no. Degut a aix貌, hist貌ricament s'han fet anar Objects com a Maps; tot i aix貌 existeixen difer猫ncies importants entre Objects i Maps que fan que l'煤s de Map sigui millor.

  • Un Object t茅 un prototipus, aix貌 implica que hi haur脿 algunes claus definides inicialment. Aquest problem es pot adre莽ar utilitzant map = Object.create(null).
  • Les claus d'un Object s贸n Strings, mentre que les claus d'un Map poden ser de qualsevol tipus.
  • 脡s f脿cil obtindre el tamany d'un Map mentre que el tamany d'un Object ha de ser calculat manualment.

Utilitzeu mapes en comptes d'objejctes quan les claus no se s脿piguin en temps d'execuci贸, o b茅 quan totes les claus o els valors siguin del mateix tipus.

Utilitzeu objectes quan hi hagi una l貌gica que operi els elements individualment.

Propietats

Map.length
El valor de la propietat length 茅s 1.
Map.prototype (en-US)
Representa el prototipus pel constructor Map. Permet afegir propietats a tots els objectes de tipus Map.

Inst脿ncies de Map

Totes les inst脿ncies de Map hereten de Map.prototype (en-US).

Propietats

{{page('ca/Web/JavaScript/Reference/Global_Objects/Map/prototype','Propietats')}}

M猫todes

{{page('ca/Web/JavaScript/Reference/Global_Objects/Map/prototype','M猫todes')}}

Exemples

Exemple: Utilitzar l'objecte Map

var myMap = new Map();

var keyObj = {},
    keyFunc = function () {},
    keyString = "a string";

// preparar els valors
myMap.set(keyString, "valor associat a amb 'un string'");
myMap.set(keyObj, "valor associat amb keyObj");
myMap.set(keyFunc, "valor associat amb with keyFunc");

myMap.size; // 3

// obtenir els valors
myMap.get(keyString);    // "valor associat amb 'un string'"
myMap.get(keyObj);       // "valor associat amb keyObj"
myMap.get(keyFunc);      // "valor associat amb keyFunc"

myMap.get("a string");   // "valor associat amb 'un string'"
                         // com que keyString === 'un string'
myMap.get({});           // undefined, perqu猫 keyObj !== {}
myMap.get(function() {}) // undefined, perqu猫 keyFunc !== function () {}

Exemple: Utilitzar NaN com a claus en un Map

NaN tamb茅 pot emprar-se com a clau. Tot i que NaN no 茅s igual a si mateix (NaN !== NaN 茅s cert), l'exemple seg眉ent funciona perqu猫 els NaNs s贸n indistinguibles entre ells:

var myMap = new Map();
myMap.set(NaN, "no un nombre");

myMap.get(NaN); // "no un nombre"

var altreNaN = Number("foo");
myMap.get(altreNaN); // "no un nombre"

Exemple: Iterar Maps amb for..of

Els mapes es poden iterar fent servir un bucle for..of :

var myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "un");
for (var [key, value] of myMap) {
  alert(key + " = " + value);
}
// Mostrar脿 2 alertes; el primer amb "0 = zero" i el segon amb "1 = one"

for (var key of myMap.keys()) {
  alert(key);
}
// Mostrar脿 2 alertes; el primer amb "0" i el segon amb "1"

for (var value of myMap.values()) {
  alert(value);
}
// Mostrar脿 2 alertes; el primer amb "zero" i el segon amb "un"

for (var [key, value] of myMap.entries()) {
  alert(key + " = " + value);
}
// Mostrar脿 2 alertes; el primer amb "0 = zero" i el segon amb "1 = un"

myMap.forEach(function(value, key) {
  alert(key + " = " + value);
}, myMap)
// Mostrar脿 2 alertes; el primer amb "0 = zero" i el segon amb "1 = un"

Exemple: Relaci贸 amb els objectes Array

var kvArray = [["clau1", "valor1"], ["clau2", "valor2"]];

// Utilitzeu el constructor de Map normal per a transformar un Array 2D clau-valor en un mapa
var myMap = new Map(kvArray);

myMap.get("valor1"); // retorna "valor1"

// Utilitzeu l'operador spread per a transformar un mapa en un Array 2D clau-valor.
alert(uneval([...myMap])); // Mostrar脿 exactament el mateix Array que kvArray

// O b茅 utilitzeu l'operador spread a l'iterador de les claus o els valor per a obtenir
// un array de nom茅s les claus o els valors
alert(uneval([...myMap.keys()])); // Mostrar脿 ["clau1", "clau2"]

Especificacions

Especificaci贸 Estat Comentaris
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Map' in that specification.
Standard Definici贸 inicial.

Compatibilitat amb navegadors

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)

Caracter铆stica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suport b脿sic

31 [1]
38

13 (13) 11 25 7.1
Argument del constructor: new Map(iterable) 38 13 (13) No support 25 No support
iterable 38 17 (17) No support 25 7.1
Map.clear() 31 [1]
38
19 (19) 11 25 7.1
Map.keys(), Map.values(), Map.entries() 37 [1]
38
20 (20) No support 25 7.1
Map.forEach() 36 [1]
38
25 (25) 11 25 7.1
Igualtat de claus per a -0 i 0 34 [1]
38
29 (29) No support 25 No support
Argument del constructor: new Map(null) (Yes) 37 (37) ? ? ?
Monkey-patched set() al Constructor (Yes) 37 (37) ? ? ?
Caracter铆stica Android Chrome per Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support No support 31 [1]
38
13.0 (13) No support No support iOS 8
Argument del constructor: new Map(iterable) No support 38 13.0 (13) No support No support No support
iterable No support No support 17.0 (17) No support No support iOS 8
Map.clear() No support 31 [1]
38
19.0 (19) No support No support iOS 8
Map.keys(), Map.values(), Map.entries() No support 37 [1]
38
20.0 (20) No support No support iOS 8
Map.forEach() No support 36 [1]
38
25.0 (25) No support No support iOS 8
Igualtat per a -0 i 0 No support 34 [1]
38
29.0 (29) No support No support No support
Argument del constructor: new Map(null) ? (Yes) 37.0 (37) ? ? ?
Monkey-patched set() al Constructor ? (Yes) 37.0 (37) ? ? ?

[1] The feature is available behind a preference. In chrome://flags, activate the entry 鈥淓nable Experimental JavaScript鈥.

Vegeu tamb茅