• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

116
Vistas
¿Cómo devolver el mismo valor n cantidad de veces desde una llamada de función de cierre?

Lo que me gustaría hacer es que un cierre devuelva el mismo valor n cantidad de veces.

 let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);

Entonces debería obtener:

 value() // returns 0 value() // returns 0 value() // returns 0 value() // returns 315 value() // returns 315 value() // returns 315 value() // returns 270 value() // returns 270 value() // returns 270

¡Esto es lo que probé!

 function getCurrentValue(values, num) { let index = -1; let l = values.length; function increment() { ++index; if (index < l) { return values[index] } else { index = -1; ++index; return values[index] } } if (num) { for (var i = 0; i < num; i++){ return increment } } return increment; }

¡Cualquier ayuda sería apreciada!

about 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Aquí está mi solución de generator y solución de cierre.

 // generator solution function* getCurrentValueIter(iter, times) { for (let i = 0; i < iter.length * times; i++) { const cur = Math.floor(i / times); yield iter[cur] } } console.log('generate') const valueIter = getCurrentValueIter([0, 1], 2) for (let value of valueIter) { console.log(value) } // you can also use valueIter manually // console.log(valueIter.next().value) // closure solution function getCurrentValue(iter, times) { let i = 0 function value() { while (i < iter.length * times) { const cur = Math.floor(i / times); i += 1 return iter[cur] } } return value } const value = getCurrentValue([0, 1], 2) console.log('closure', value()) console.log(value()) console.log(value()) console.log(value())

about 3 years ago · Juan Pablo Isaza Denunciar

0

Simplemente use una función de iterador .

 function* getCurrentValue(arr, count) { for (let item of arr) { for (let j = 0; j < count; j++) { yield item; } } } for (let value of getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3)) { console.log(value); }

about 3 years ago · Juan Pablo Isaza Denunciar

0

Usando solo un cierre: realice un seguimiento del índice y la cantidad de repeticiones fuera de la función devuelta, para que los valores persistan a través de las llamadas:

 function getCurrentValue(arr, n) { let index = 0; let repeat = 0; return function() { if (repeat < n) { repeat++; } else { repeat = 1; index++; } return arr[index]; } } let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3); console.log(value()); // returns 0 console.log(value()); // returns 0 console.log(value()); // returns 0 console.log(value()); // returns 315 console.log(value()); // returns 315 console.log(value()); // returns 315 console.log(value()); // returns 270 console.log(value()); // returns 270 console.log(value()); // returns 270 console.log(value()); // returns 225
 .as-console-wrapper { max-height: 100% !important; }

La sección if / else se puede acortar usando % para aumentar el valor de repeat y limitarlo al máximo:

 function getCurrentValue(arr, n) { let index = -1; let repeat = -1; return function() { repeat = (repeat + 1) % n; if (repeat === 0) index++; return arr[index]; } } let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3); console.log(value()); // returns 0 console.log(value()); // returns 0 console.log(value()); // returns 0 console.log(value()); // returns 315 console.log(value()); // returns 315 console.log(value()); // returns 315 console.log(value()); // returns 270 console.log(value()); // returns 270 console.log(value()); // returns 270 console.log(value()); // returns 225
 .as-console-wrapper { max-height: 100% !important; }

about 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda