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

223
Vistas
¿Cómo reiniciar la iteración con el método Map.values()?

Quiero reiniciar la iteración después de que el iterador llegue al estado terminado. Solo mira el ejemplo:

 const newMap = new Map<string, string>([ ['key1', 'value1'], ['key2', 'value2'] ]); const iterator = newMap.values() // It can be newMap.entries() iterator.next().value // prints value1 iterator.next().value //prints value2 iterator.next().value //prints undefined

Solo quiero algo como:

 iterator.restart(); iterator.next().value // prints value1
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Llame .values (o el método que sea) nuevamente.

 const newMap = new Map([ ['key1', 'value1'], ['key2', 'value2'] ]); let iterator = newMap.values() // It can be newMap.entries() console.log(iterator.next().value) // prints value1 console.log(iterator.next().value) //prints value2 console.log(iterator.next().value) //prints undefined iterator = newMap.values() console.log(iterator.next().value) // prints value1

Los iteradores no son reutilizables; debe crearlos de nuevo cada vez que desee comenzar desde el principio.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Si desea repetir valores sin fin, puede crear una función de generador que almacene en caché los valores la primera vez y luego siga brindándole los valores almacenados en caché desde el principio para siempre:

 function* repeat(iterable) { const cache = []; //lazily supply the values from the iterable while caching them for (const next of iterable) { cache.push(next); yield next; } //delegate to the cache at this point while(true) yield* cache; } const newMap = new Map([ ['key1', 'value1'], ['key2', 'value2'] ]); const iterator = repeat(newMap.values()) // It can be newMap.entries() console.log(iterator.next().value) // prints value1 console.log(iterator.next().value) // prints value2 console.log(iterator.next().value) // prints value1 console.log(iterator.next().value) // prints value2 console.log(iterator.next().value) // prints value1 console.log(iterator.next().value) // prints value2

Alternativamente, si no desea almacenar en caché, puede hacer que la implementación de repeat() sea más simple tomando una función que le proporcione un iterable. Cada vez que lo llama, obtiene uno nuevo y lo delega para siempre:

 function* repeat(iterableSupplier) { //delegate to the value from the supplier while(true) yield* iterableSupplier(); } const newMap = new Map([ ['key1', 'value1'], ['key2', 'value2'] ]); const iterator = repeat(() => newMap.values()) // It can be newMap.entries() // give a function ^^^^^ console.log(iterator.next().value) // prints value1 console.log(iterator.next().value) // prints value2 console.log(iterator.next().value) // prints value1 console.log(iterator.next().value) // prints value2 console.log(iterator.next().value) // prints value1 console.log(iterator.next().value) // prints value2

Ver más sobre:

  • function* - funciones del generador
  • yield* - delegar a otro iterable
  • Iteradores y generadores : más información sobre el tema en general
about 4 years ago · Juan Pablo Isaza Denunciar

0

Podría crear su propio iterador que, cuando se le solicite, vuelva a llamar a newMap.values():

 const newMap = new Map([ ['key1', 'value1'], ['key2', 'value2'] ]); const myIterator = (() => { let currentIterator = newMap.values(); return { next() { return currentIterator.next(); }, restart() { currentIterator = newMap.values(); } } })() console.log(myIterator.next().value) // prints value1 console.log(myIterator.next().value) //prints value2 console.log(myIterator.next().value) //prints undefined myIterator.restart(); console.log(myIterator.next().value) // prints value1

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