Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

227
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!