Comment créer l'équivalent JavaScript/JQuery de ce code Java:
Map map = new HashMap(); //Doesn't not have to be a hash map, any key/value map is fine
map.put(myKey1, myObj1);
map.put(myKey2, myObj2); //Repeat n times
function Object get(k) {
return map.get(k);
}
Edit: Réponse obsolète, le code javascript standard d’ECMAScript 2015 (ES6) a une implémentation de Map, cliquez ici pour plus d’informations: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
var map = new Object(); // or var map = {};
map[myKey1] = myObj1;
map[myKey2] = myObj2;
function get(k) {
return map[k];
}
//map[myKey1] == get(myKey1);
Il suffit d'utiliser des objets simples:
var map = { key1: "value1", key2: "value2" }
function get(k){
return map[k];
}
function Map() {
this.keys = new Array();
this.data = new Object();
this.put = function (key, value) {
if (this.data[key] == null) {
this.keys.Push(key);
}
this.data[key] = value;
};
this.get = function (key) {
return this.data[key];
};
this.remove = function (key) {
this.keys.remove(key);
this.data[key] = null;
};
this.each = function (fn) {
if (typeof fn != 'function') {
return;
}
var len = this.keys.length;
for (var i = 0; i < len; i++) {
var k = this.keys[i];
fn(k, this.data[k], i);
}
};
this.entrys = function () {
var len = this.keys.length;
var entrys = new Array(len);
for (var i = 0; i < len; i++) {
entrys[i] = {
key: this.keys[i],
value: this.data[i]
};
}
return entrys;
};
this.isEmpty = function () {
return this.keys.length == 0;
};
this.size = function () {
return this.keys.length;
};
}
C'est une vieille question, mais parce que les réponses existantes pourraient être très dangereuses, je voulais laisser cette réponse aux futurs gens qui pourraient trébucher ici ...
Les réponses basées sur l'utilisation d'un objet en tant que HashMap sont cassées et peuvent avoir des conséquences extrêmement désagréables si vous utilisez autre chose qu'une chaîne comme clé. Le problème est que les propriétés de l'objet sont contraintes à Strings à l'aide de la méthode .toString. Cela peut conduire à la méchanceté suivante:
function MyObject(name) {
this.name = name;
};
var key1 = new MyObject("one");
var key2 = new MyObject("two");
var map = {};
map[key1] = 1;
map[key2] = 2;
Si vous vous attendiez à ce que Object se comporte de la même manière qu’une Java Map ici, vous seriez plutôt fâché de découvrir que la carte ne contient qu'une entrée avec la clé de chaîne [object Object]
:
> JSON.stringify(map);
{"[object Object]": 2}
Ceci est clairement pas un remplacement pour HashMap de Java. Bizarrement, étant donné son âge, Javascript n’a pas d’objet cartographique général. Il y a de l'espoir à l'horizon, cependant: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map en jetant un coup d'œil au tableau de compatibilité du navigateur. montrera que ce n'est pas encore prêt à être utilisé dans les applications web d'usage général.
En attendant, le mieux que vous puissiez faire est de:
map[toUniqueString(key1)] = 1
Parfois, cependant, ce n'est pas possible. Si vous souhaitez mapper des données en fonction, par exemple, d'objets File, il n'existe aucun moyen fiable de le faire, car les attributs exposés par l'objet File ne suffisent pas pour garantir son unicité. (Vous pouvez avoir deux objets File qui représentent différents fichiers sur le disque, mais il n’ya aucun moyen de les distinguer dans JS dans le navigateur). Dans ces cas, malheureusement, tout ce que vous pouvez faire est de refactoriser votre code pour éliminer le besoin de les stocker dans une boîte aux lettres. peut-être, en utilisant plutôt un tableau et en les référençant exclusivement par index.
var map = {'myKey1':myObj1, 'mykey2':myObj2};
// You don't need any get function, just use
map['mykey1']
Si vous n'êtes pas limité à JQuery, vous pouvez utiliser le framework prototype.js. Il a une classe appelée Hash: vous pouvez même utiliser JQuery & prototype.js ensemble. Il suffit de taper jQuery.noConflict ();
var h = new Hash();
h.set("key", "value");
h.get("key");
h.keys(); // returns an array of keys
h.values(); // returns an array of values