Función de rango en Javascript | Programador Web Valencia

Función de rango en Javascript

2 minutos

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.

Versión JavaScript

/**
 * 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));
}

Versión TypeScript

/**
 * Returns an array with a sequence.
 */
export function range(start: number, stop: number | null = null, step: number = 1) {
  const startArray = stop ? start : 0
  const stopArray = stop ?? start
  return Array.from({ length: (stopArray - startArray) / step + 1}, (_, i) => startArray + (i * step));
}

ejemplos

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?

Comprame un café
Pulsa sobre la imagen

No te sientas obligado a realizar una donación, pero cada aportación mantiene el sitio en activo logrando que continúe existiendo y sea accesible para otras personas. Además me motiva a crear nuevo contenido.

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...