Programación funcional - Implementa map en un prototipo

Cuéntanos qué está pasando:
¿Alguien me puede explicar el codigo en si?
(Sobre todo la parte de Array.prototype.myMap) <= ¿Que es lo que hace?

  **Tu código hasta el momento**
// La variable global
const s = [23, 65, 98, 5];

Array.prototype.myMap = function(callback) {
const newArray = [];
// Cambia solo el código debajo de esta línea
for (let i = 0; i < this.length; i++) {
  newArray.push(callback(this[i]))
}

// Cambia solo el código encima de esta línea
return newArray;
};

const new_s = s.myMap(function(item) {
return item * 2;
});


  **Información de tu navegador:**

El agente de usuario es: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 OPR/90.0.4480.84

Desafío: Programación funcional - Implementa map en un prototipo

Enlaza al desafío:

1 Like

Hola @AlejandroCullen

Prueba esta herramienta para ejecutar el código paso a paso, a ver si te ayuda:
https://pythontutor.com/javascript.html#mode=edit

Pegas el código dentro de la caja y pulsas en Visualize Ejecution, y luego vas haciendo clic en Next para seguir la ejecución del código.

Me parece una herramienta genial y no requiere saber mucho inglés.

Aún así, espero que alguien pueda explicártelo correctamente, yo no me veo capacitado. Puedes leer este artículo de la documentación de Mozilla también a ver si te aclara el asunto un poco más: MDN | Herencia y la cadena de prototipos

Suerte y saludos

Te he comentado el código para que lo ejecutes y vayas leyendo todo el proceso.

El ejercicio consta de 2 partes (solo nos hace tocar la primera parte).

  1. Crear una función que simule el funcionamiento de un array.map(item => item),
    función que luego se llama en la parte inferior del código.
    Como habrás visto anteriormente, esto recorre un array y nos devuelve sus valores
    en uno nuevo. Si esto no te suena, te recomiendo volver atrás y repasarlo.
  2. Usar nuestro myMap creado y además multiplicar sus valores por 2
    Con lo que nos estará devolviendo un nuevo array con cada uno de sus valores
    multiplicados por 2
// La variable global
const s = [23, 65, 98, 5];

//Array.prototype: nos define el prototipo de un Array para poder usarlo como "s" (s.myMap)
//y myMap = nos dice que será una función que estamos definiendo para llamarla al final

//Lo que conseguimos con esto, como te dice en el ejemplo
//Es crear una funcion que haga el mismo funcionamiento que un array.map(item => item)
//Lo que hace nuestra funcion es recorrer un array y mostrarnoslo en uno nuevo
Array.prototype.myMap = function(callback) {
const newArray = [];
// Cambia solo el código debajo de esta línea
for (let i = 0; i < this.length; i++) {
  console.log("Valor de this:", this);
  console.log("Posición arr i:", i);
  console.log("Valor de this[i]:",this[i]);
  newArray.push(callback(this[i]))
}

// Cambia solo el código encima de esta línea
return newArray;
};

//Aqui aprovechamos nuestro myMap creado anteriormente para ejecutarlo y ademas le decimos
//que nos multiplique cada elemento del array por 2 y nos lo devuelva en un array nuevo.
const new_s = s.myMap(function(item) {
return item * 2;
});
//Devolvemos el resultado multiplicando todos los items del array inicial por 2
//Y los devolvemos en un nuevo array
console.log(new_s)