Quel développeur n’a jamais utilisé l’objet Map dans son langage de prédilection ? personne bien entendu, cet objet très utile permet de créer un ensemble de couple clés/valeurs, la clé permettant de retrouver rapidement la valeur qui lui a été associée. Les clés sont des objets uniques et les valeurs peuvent être dupliquées.

© http://upload.wikimedia.org

© http://upload.wikimedia.org

Un tel objet n’existe pas en JavaScript contrairement en Java, nous allons cependant voir qu’il est possible de simuler en tel comportement rapidement en JavaScript, sans trop d’effort.

Java

En Java il existe plusieurs implémentations de cet interface, apportant chacune quelques variantes :

  1. java.util.HashMap : c’est l’implémentation standard, adaptée dans la plupart des cas.
  2. java.util.TreeMap : cette classe ajoute une fonction de tri des clés de la Map.
  3. java.util.LinkedHashMap : cette classe conserve l’ordre d’ajout des clés.
  4. java.util.IdentityHashMap : c’est l’opérateur ‘==’ qui est utilisé pour savoir si deux clés sont identiques (au lieu de la méthode equals() pour les autres).
  5. java.util.WeakHashMap : cette classe conserve les couples en utilisant des références faibles, si une clé n’est plus référencée dans le programme alors elle est automatiquement supprimée de la Map.

Voici un exemple d’utilisation :

Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
map.put("Danone", new HashMap<String, String>());
map.get("Danone").put("Biens", "10");
map.get("Danone").put("Services", "20");
map.put("Nestlé", new HashMap<String, String>());
map.get("Nestlé").put("Biens", "25");
map.get("Nestlé").put("Services", "11");

System.out.println(map.get("Danone").get("Biens")); // 10
System.out.println(map.get("Nestlé").get("Services")); // 11

JavaScript

Dans les faits c’est assez simple de faire la même chose en JavaScript, les tableaux associatifs sont là pour nous aider. Voici le même exemple que ci-dessus en utilisant la notation JSON pour se rendre compte que c’est tout simple au final :

var map = {
	"Danone" : {
		"Biens" : "10",
		"Services" : "20"
	},
	"Nestlé" : {
		"Biens" : "25",
		"Services" : "11"
	}
};

alert(map["Danone"]["Biens"]); // 10
alert(map["Nestlé"]["Services"]); // 11

Par contre lorsque vous souhaitez créer dynamiquement une tel Map, c’est un peu plus compliqué, il faut s’appuyer sur la structure de base « Object » qui est un conteneur de propriétés que l’on peut enrichir à l’infini :

var map = new Object();
map["Danone"] = new Object();
map["Danone"]["Biens"] = "10";
map["Danone"]["Services"] = "20";
map["Nestlé"] = new Object();
map["Nestlé"]["Biens"] = "25";
map["Nestlé"]["Services"] = "11";

alert(map["Danone"]["Biens"]); // 10
alert(map["Nestlé"]["Services"]); // 11

Aller plus loin

Voici quelques liens de bibliothèques JavaScript permettant de simuler intégralement l’objet HashMap de Java :

HashMapJS : une implémentation très simple d’une hash map. Les clés et valeurs peuvent être arbitrairement des objets javascript. Il n’y a aucune restriction sur les objets étant à la fois clé et valeur. Les méthodes autorisées sont les suivantes :  put, get, del, each.

jshashtable : une implémentation complète d’une hash table. Elle permet d’associer des objets en tant que clé comme en tant que valeur. Chaque clé est associé à une unique valeur. Les méthodes autorisées sont les suivantes : put, putAll, get, containsKey, containsValue, clear, isEmpty, keys, values, entries, remove, size, clone, each.

{ 2 commentaires… add one }

Participez !

Article suivant:

Article précédent:

Derniers Commentaires

  • Greg { Lut, Pour ma part, j'avais acheté la mienne en passant par Amazon.fr, je l'avais bien... } – 19 mai, 13:33
  • jean louis Vertu { Bonjour, Je voudrais savoir si quelqu'un peu me donner une adresse où je peu acheter... } – 19 mai, 12:26
  • Pascal { Elle est triste parce qu'il n'y a pas de vieille anime avant 1990? Tu voulais... } – 16 mai, 5:33
  • Centre d'appel Madagascar { les projets sur le Web ont de quoi frustrer les autorités fiscales, faute de modèle... } – 14 mai, 12:05
  • Greg { Bon sujet en effet, que je traite régulièrement ici, voir par exemple => http://desgeeksetdeslettres.com/pourquoi/christophe-dejours-probleme-monde-du-travail :) } – 12 mai, 18:33
  • Olivier { Je le répète, je ne suis pas contre le progrès, mais contre l'idéologie dominante bâtie... } – 12 mai, 18:31
  • Greg { Je te cite : "C’est le progrès cela, c’est pour cela que les générations avant... } – 12 mai, 16:37

Catégories