Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

221
Visualizações
¿Hay alguna diferencia entre iterar un mapa directamente y mediante un iterador devuelto por las entradas ()?

Si tengo un Map en JavaScript, por ejemplo

 const myMap = new Map() myMap.set(0, 'zero') myMap.set(1, 'one')

Entonces, ambos parecen ser válidos para iterar a través de los pares clave-valor (y muchas otras opciones que actualmente no me interesan):

 // with .entries() for (const [key, value] of myMap.entries()) { // } // without for (const [key, value] of myMap) { // }

¿Hay algún caso extremo en el que no hagan lo mismo?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

¿Hay algún caso extremo en el que no hagan lo mismo?

No. El objeto iterador que obtiene de entries es exactamente el mismo que proporciona el propio mapa. De hecho, someMap[Symbol.iterator] (la función llamada cuando le pides a un objeto su iterador) es literalmente la misma función que someMap.entries :

 const someMap = new Map(); console.log(someMap[Symbol.iterator] === someMap.entries);

En la especificación:

  • Map.prototype.entries
  • Map.prototype[@@iterator] ( @@iterator iterator es Symbol.iterator ), que literalmente solo apunta a entries
about 4 years ago · Juan Pablo Isaza Relatório

0

Ambos hacen exactamente lo mismo por defecto.

Cuando for...of se usa con un valor como for (const item of collection) , entonces se usa el conocido símbolo @@iterator para encontrar cuáles serían los valores.

Para objetos Map , @@iterator iterator devolverá .entries() . Es exactamente como llamar al método porque es :

 const map = new Map(); console.log(map[Symbol.iterator] === map.entries);

Por lo tanto, ambos bucles harán lo mismo.

Pequeña advertencia : eso es por defecto . Si se anula el símbolo @@iterator , entonces puede haber diferentes resultados:

 const myMap = new Map() myMap.set(0, 'zero') myMap.set(1, 'one') myMap[Symbol.iterator] = function* () { const entries = this.entries(); for (const [key, value] of entries) yield [key, value.toUpperCase()]; //transform the value } // with .entries() for (const [key, value] of myMap.entries()) { console.log("with .entries()", key, value) } // without for (const [key, value] of myMap) { console.log("without", key, value) }

Sin embargo, eso es excepcionalmente inusual que suceda. Y si es así, es probable que quien haya proporcionado el mapa quiera una lógica de iteración diferente.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda