Función de rango en 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.

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

You can use the terminal.

ssh customer@andros.dev -p 5555

Written by Andros Fenollosa

January 24, 2022

2 min of reading

You may also like