Función de rango en Javascript

1 minuto

Javascript

Una de las funciones más prácticas a la hora de iterar es range(), muy común en lenguajes como Clojure, Python o PHP; pero en JavaScript no disponemos de ella a no ser que usemos librerías externas como Lodash. Por fortuna, si usamos un poco de ingenio y Array.from() podemos obtener prácticamente la misma funcionalidad.

/**
 * Returns an array with a sequence.
 *
 * @param {number} start Beginning of the range.
 * @param {number} stop End of range.
 * @param {number} step Interval between numbers. Default is 1.
 * @return {array}
 */
function range(start, stop=undefined, step=1) {
    const startArray = stop  === undefined ? 0 : start;
    const stopArray = stop  === undefined ? start : stop;
    return Array.from({ length: (stopArray - startArray) / step + 1}, (_, i) => startArray + (i * step));
}

Algunos ejemplos usándola.

range(4);
// [0, 1, 2, 3, 4]

range(5, 15);
// [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

range(1, 10, 2);
// [1, 3, 5, 7, 9]

range(0, 50, 5);
// [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

¿Es posible conseguir lo mismo usando un map()? Por supuesto, tenemos diversos enfoques para solucionarlo, aunque usar Array.from evita un Array intermedio y es más natural al lenguaje.

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me ayudas?

No te sientas obligado a realizarme una donación, pero cada aportación me ayuda a mantener el sitio en activo para que continúe existiendo y me motiva a continuar creando nuevo contenido.

Comprame un café
Pulsa sobre la imagen
  • 1 café: Se mantiene el dominio durante 4 meses.
  • 2 cafés: Se paga 1 mes de servidor.
  • 3 cafés: Se cubre 1 mes de Black box.

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...