🛡️🛡️Escudo anti-spoilers🛡️🛡️
/
Aprovechando el espacio dejame explicarte un poquito más acerca de las funciones puras como es este caso, la definición es un poco curiosa:
Una función pura es aquella que dado el mismo input, tendremos el mismo output
En palabras sencillas, una función que no modifica el input.
/
Lo siguiente no es un spoiler así que puedes seguir leyendo.
/
imaginemos que la función myMap modifica nuestro array, de tal manera que siempre tendremos un resultado diferente. Ejemplo
const array = [1,2,3,4,5]
myMap(array, (num) => num * 2)
console.log(array)
// Suponiendo que se modifica el array tendríamos [2,4,6,8,10]
// Lo volvemos a ejecutar
myMap(array, (num) => num * 2)
// Teniendo el mismo input estamos obteniendo un diferente output
console.log(array)
// en este caso, ahora sería [4,8,12,16,20]
La ventaja de las funciones de orden superior es básicamente eso, que no modifican el input (el array en este caso).
Por lo que esta HOF siempre nos dará el mismo resultado dado el mismo input
const array = [1,2,3,4,5]
myMap(array, (num) => num * 2)
// Si no modificamos el array, la función siempre nos retornará [2,4,6,8,10]
console.log(array)
// Al no modificar el array, nos dará siempre lo mismo [1,2,3,4,5]
// Lo volvemos a ejecutar
myMap(array, (num) => num * 2)
// El resultado sigue siendo el mismo [2,4,6,8,10]
// Teniendo el mismo input estamos obteniendo un mismo output
console.log(array)
// en este caso, sigue siendo [1,2,3,4,5] (conserva su estado)
Ahora sí, los spoilers aquí abajo
Explicación de la solución
Aquí el código de solución
function myMap(array, func) {
// Creamos el array que retornaremos
// Inicialmente está vacío
const rta = [];
for (let i = 0; i < array.length; i++) {
// Luego iteramos por cada elemento del array
const element = array[i];
// Y lo vamos pasando al array vacío después de ejecutar
// la función sobre cada elemento del array
rta.push(func(element));
// Es importante recalcar que en ningún momento modificamos el array original
}
// Al final lo retornamos
return rta;
}
Y listo! Un par de lineas para resolver este ejercicio ¿Cómo te fue a ti?
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?