Map em Javascript

Olá a todos, boa noite.
Pessoal estou tentando criar um Map (Map<k,v> em java) em javascript, onde as chaves e os valores são adicionados dinamicamente, no entanto, quando tento “cria-los” de maneira dinâmica sempre acaba dando erro.

Tento criá-los a partir do seguinte código.

[code]var key;
var value;
$(".conteudoMenu a").click(function(){
// Obtenhos os valores das Keys
key = $(this).parent(".conteudoMenu").parent(“li”).find(".itemMenu").attr(“id”);
// Obtenho os valores do Values
value = $(this).attr(“id”);

// Método que chamo para adicionar as keys e os values
Processar({ key : [value] });

});

var Processar = function(mapaDeListas) {
// mapaDeListas[key] -> Cria o array com o nome da Key
// Verifica se já existe chave vinda do “key” e se o valor de “value” está presente no array
if (mapaDeListas[key] && $.inArray(value, mapaDeListas[key]) == -1) {
// Caso o array com o nome da key já exista e o valeu não, então, ele adicionar o value a sua respectiva key
mapaDeListas[key].push(value);
}
else {
// Caso a condição acima seja false, então, cria-se o array de acordo com o valor da “key” e adiciona o valor de "value"
mapaDeListas[key] = [value];
}
}[/code]
No entanto, da maneira que meu codigo estar, mesmo que eu adicione dois valores pertencente a mesma Key, ele sempre cai no else além de sobrescrever os valores já existentes.
E caso eu adicione uma Key nova em vez de ser criado um novo array o que acontece é que este novo sobrescreve o anterior.

Alguém sabe me dizer o que devo fazer para corrigir o meu código?
Desde de já obrigado pela ajuda de todos.

Num Map em Java, se você tentar adicionar dois valores distintos para uma mesma chave, ele sobrescreve o primeiro valor na segunda adição. Para manter vários valores na mesma chave, você precisa fazer um Map onde o valor seja uma coleção. Algo do tipo:

Map<String, List<String>> meuMapa = new HashMap<String, List<String>>();
add(meuMapa, "chave", "um");
add(meuMapa, "chave", "dois");

//metodo para adicionar um valor:
public void add(Map<String, List<String>> mapa, String key, String value) {
   if (!mapa.containsKey(key)) {
      mapa.put(key, new ArrayList()); //inicializando colecao
   }
   mapa.get(key).add(value);
}

Em Javascript você faz algo semelhante:

var meuMapa = {};
add(meuMapa, "chave", "um");
add(meuMapa, "chave", "dois");

function add(mapa, key, value) {
   if (!(key in mapa)) {
      mapa[key] = []; //inicializando colecao
   }
   mapa[key].push(value);
}

Eu não testei este código, portanto podem haver erros de digitação.

Ainda, você pode criar um tipo Mapa que faça está verificação pra você (ao invés de uma function somente):

MyMap.prototype = {
   add: function(key, value) {
      if (!(key in this)) {
         this[key] = [];
      }
      this[key].push(value);
   }
};

var meuMapa = new MyMap();
meuMapa.add('chave', 'um');
meuMapa.add('chave', 'dois');