Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda