Playground - Modifica el prototype de los arrays
Clase 55 de 99 • 30 días de JavaScript
Contenido del curso
Harold Zurita Simon
David Higuera
Benjamin Rodriguez
Frandel Corporan Rodríguez
Nicolás Felipe Pinto Vega
Orlando Sánchez
Esteban Alzate Atehortua
Osvaldo Martinez Guillen
Carina Payleman
Joan Alexander Valerio Rodríguez
Andrés Soret Chacin
Marco Antonio Urquidi Espada
Leonardo de los angeles Espinoza Hernandez
Christopher Armando Jiménez Valverde
Andres Felipe Torres
Pablo Torres Pérez
Leonardo de los angeles Espinoza Hernandez
Harrison Steve Pinzón Neira
David Ochoa
Fabrizio López
Yerson Garza
Rubén Hernández Hernández
Pariksit Erikrsnan Ortiz Flores
Angel Javier Sanchez Tenjo
Duvan Alexis Palomino Ramirez
Solución… 😄 . Para el reto agregamos el nuevo método myFilter al prototype del Array, creando una función con un callback pasado como parámetro. . Algo interesante es que no se puede crear usando una función flecha como: (callback) => { // etc }. Porque más adelante la palabra clave this en una arrow function hace referencia al contexto en el que se definió la función, en lugar de al objeto Array al que se está aplicando el método. . Creamos un array filtrado vacío. Recorremos el Array comparando sus elementos con el callback y si cumple lo añadimos al array filtrado. . Retornamos el array filtrado. .
export function arrayModified() { Array.prototype.myFilter = function (callback) { let filtered = []; for (let i = 0; i < this.length; i++) { if (callback(this[i])) { filtered.push(this[i]); } } return filtered; }; }
!placeholder
export function arrayModified() { // Tu código aquí 👈 Array.prototype.myFilter = function (callback) { const output = [] for (const x of this) if (callback(x) === true) output.push(x) return output } }
🛡️Escudo anti-spoilers🛡️
export function arrayModified() { Array.prototype.myFilter = function (func) { const res = [] for (const element of this) { if (func(element)) res.push(element) } return res } }
falle muchisimo 😥
export function arrayModified() { Array.prototype.myFilter = function (callback) { let newArray = []; for (let i = 0; i < this.length; i++) { if (callback(this[i])) { newArray[newArray.length] = this[i] } } return newArray; }; }
Muchas gracias por tu solución. Yo lo solucioné con el método push pero quería ver una solución que no lo utilizara para agregar el elemento filtrado.
Te felicito, hasta el momento habias sido el unico que publico que realmente cumplió con todos los test.
Hay un pequeño bug al hacer la prueba, si la haces mas de una vez te toma como si estuvieras usando métodos de Arrays para hacer el desafio. Supongo que es gracias a que el emulador de las pruebas agrega tu método y si lo vuelves a intentar ya lo toma como un método que venia.
Así que cada vez que vayan a hacer una nueva prueba, guarden su codigo, recarguen la pagina y vuelvanlo a intentar.
Mi solcución:
export function arrayModified() { Array.prototype.myFilter = function (funcion) { let arrayMap = []; for (let prop of this) { funcion(prop) ? arrayMap.push(prop) : prop; } return arrayMap; } }
export function arrayModified() { Array.prototype.myFilter = function (callback) { const filteredArray = []; for (let i of this) { if (callback(i)) { filteredArray.push(i); } } return filteredArray; } }
Con pocas lineas de código se puede resolver este Challenge, solo hay que pensar un poquito mas
My solution 👇
Array.prototype.myFilter = function (callback) { const filteredArray = []; for (let i = 0; i < this.length; i++) { const element = this[i]; if (callback(element)) { filteredArray.push(element); } } return filteredArray; }
comparto mi solucion pero se me dificulto mucho por el uso de this y ademas no podia probar en consola sin instanciar la funcion arrayModified, ya que directamente no funciona.
export function arrayModified() { Array.prototype.myFilter = function (fun) { let rta = []; for (let index = 0; index < this.length; index++) { const element = this[index]; if (fun(element)) { rta.push(element); } } return rta; } }
Hola! Como consejo, para probarlo en la consola no tenías que acceder a la función, sino que, directamente a array,myFilter y probar los cambios :D
#LeoCode0 me paso lo mismo de la función, si no se puede utilizar la función, que sentido tiene realizar la prueba de esa manera? saludos
Esta es la implementación interna de lo que probablemente hace el método de los arrays filter. Interesante ejercicio el poder agregar un método nuevo a los prototypes.
export function arrayModified() { Array.prototype.myFilter = function (func) { let newArray = []; this.forEach((element) => { if (func(element)) { newArray.push(element); } }); return newArray; }; }
Solución con una comprobación extra por si no pasan una función. No es que no confíe en @LeoCode0 jejeje
. . . . . . . . . . . . . . . . . .
export function arrayModified() { Array.prototype.myFilter = function (callback) { if (typeof callback !== 'function') { throw new TypeError('El argumento proporcionado no es una función'); } const newArray = []; // Evita calcular en cada bucle const length = this.length; for (let i = 0; i < length; i++) { if (i in this) { const element = this[i]; // Se agregan argumentos para mejorar el contexto en caso de ser necesario o si se requiere utilizarlos. if (callback(element, i, this)) { newArray.push(element); } } } return newArray; }; }
Bien pensado... Haré iteraciones en los desafíos para que tengan que poner validaciones por si les pasamos cosas raras 👀
Gracias por la idea 🚀
Solución al desafio :D :
🛡️🛡️🛡️Escudo anti spoilers🛡️🛡️🛡️
Modifica el prototype de los arrays
!Spoiler Shield
export function arrayModified() { // Tu código aquí 👈 function myFilter(callback) { const filterArray = []; for (let elem of this) { if (callback(elem)) { filterArray.push(elem); } } return filterArray; } Array.prototype.myFilter = myFilter; }
Aquí mi solución, traté de implementarla de la misma manera que indica la documentación del método Filter, lo que no he sabido implementar es el argumento opcional "thisArg". . . . . . . . . . . . . . . . . .
export function arrayModified() { // Tu código aquí 👈 Array.prototype.myFilter = function (callback) { const filteredArray = []; for (let i = 0; i < this.length; i ++){ const result = callback(this[i], i, this); if (result) filteredArray.push(this[i]); } return filteredArray; } }
export function arrayModified() { Array.prototype.myFilter = function (callback) { const filteredArr = []; for (let i = 0; i < this.length; i++) { if (callback(this[i], i, this)) { filteredArr.push(this[i]); } } return filteredArr; } }
Mi solución 💚 !Hero . . .
export function arrayModified() { Array.prototype.myFilter = function(func){ let filtered = [] for(const elem of this){ if (func(elem)) filtered.push(elem) } return filtered } }
Mi aporte: | | | | | | | |
export function arrayModified() { // Tu código aquí 👈 Array.prototype.myFilter = function (theFunction) { let resultArray = []; let position = 0; for (let i = 0; i < this.length; i++) { if (theFunction(this[i])) { resultArray[position] = this[i]; position++; } } return resultArray; }; }
Hola.
✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
export function arrayModified() { Array.prototype.myFilter = function (callbackFn) { const arrayFilter = []; this.forEach((element) => { if (callbackFn(element)) { arrayFilter.push(element); } }); return arrayFilter; }; }
No corren las pruebas, sera que el simulador esta roto???