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.
{{ comments.length }} comentarios