JavaScript Fundamentals

Hashmaps em JavaScript: Objetos vs. o Objeto Map

Spread the love

Hashmaps em JavaScript: Objetos vs. o Objeto Map

JavaScript não possui um equivalente direto a “HashMap” como algumas outras linguagens. No entanto, podemos alcançar funcionalidades similares usando duas abordagens principais: objetos JavaScript simples e o objeto Map embutido. Este artigo explora ambas, comparando seus pontos fortes e fracos para ajudá-lo a escolher a melhor abordagem para suas necessidades.

Sumário

Usando Objetos como Hashmaps

Objetos JavaScript podem funcionar como hashmaps simples. Eles usam chaves string para acessar valores associados. Essa abordagem é direta, mas tem limitações.

Exemplo:


const myHashMap = {}; // Cria um objeto vazio

// Insere pares chave-valor
myHashMap.apple = 1;
myHashMap.banana = 2;
myHashMap.cherry = 3;

// Acessa valores
console.log(myHashMap.banana); // Saída: 2

// Verifica se uma chave existe
console.log('apple' in myHashMap); // Saída: true

// Deleta um par chave-valor
delete myHashMap.banana;

// Itera sobre pares chave-valor (Observação: a ordem não é garantida)
for (const key in myHashMap) {
  console.log(key, myHashMap[key]);
}

Vantagens:

  • Simples e familiar para desenvolvedores JavaScript.
  • Sem dependências externas.

Desvantagens:

  • As chaves são limitadas a strings (ou valores que implicitamente convertem para strings).
  • Não possui propriedade de tamanho embutida; você precisa controlar o tamanho manualmente.
  • Falta métodos embutidos como get, set, has, etc.
  • A ordem das chaves não é garantida.

Usando o Objeto Map

O objeto Map (introduzido no ES6) oferece uma solução mais robusta. Ele suporta qualquer tipo de dado como chave, evita problemas de coerção de tipo e fornece métodos embutidos para manipulação eficiente.

Exemplo:


const myMap = new Map();

// Insere pares chave-valor
myMap.set("apple", 1);
myMap.set(123, "number"); // Número como chave
myMap.set({ a: 1 }, "object"); // Objeto como chave

// Acessa valores
console.log(myMap.get("apple")); // Saída: 1
console.log(myMap.get(123));     // Saída: "number"

// Verifica se uma chave existe
console.log(myMap.has("apple")); // Saída: true

// Deleta um par chave-valor
myMap.delete("apple");

// Obtém o tamanho
console.log(myMap.size); // Saída: 2

// Itera sobre pares chave-valor (a ordem é preservada)
for (const [key, value] of myMap) {
  console.log(key, value);
}

Vantagens:

  • Suporta qualquer tipo de dado como chave.
  • Fornece métodos embutidos (set, get, has, delete, size).
  • Itera eficientemente com loops for...of.
  • Preserva a ordem de inserção.

Desvantagens:

  • Requer compatibilidade com ES6 (embora existam polyfills disponíveis).

Conclusão

Enquanto objetos JavaScript simples podem ser suficientes para comportamentos simples de tipo hashmap, o objeto Map é geralmente recomendado por suas características superiores e eficiência. A menos que você esteja severamente limitado pela compatibilidade do navegador, Map é a escolha preferida para a maioria dos projetos JavaScript modernos.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *