Buenas tardes a todos!! primero que nada, he visto que existe un tema: https://www.mediavida.com/foro/dev/plataforma-desarrolladoresprogramadores-junior-686242 pero no he visto que se puedan formular preguntas tan específicas así que abro nuevo tema.
Quiero meterle caña al tema del desarrollo web y actualmente estoy haciendo el curso de The Odin Project, el cual creo que es bastante completo para entender lo básico. Voy por la parte en la que tocamos JS y la verdad es que estoy bastante atascado en cómo funciona y cómo aplicar la lógica en determinados ejercicios. Ya he dado las cosillas básicas y he hecho pequeñas virgerías (El juego de piedra, papel o tijera, FizzBuzz y en breves tocará hacer una calculadora), así que ciertos conceptos creo que los tengo bien afianzados.
El tema es el siguiente, tengo que hacer varios ejercicios (se supone que tengo que poner en práctica el Test Driven Development) y hay uno o dos que pese a que los he logrado terminar (tras googlear mucho y ver algún video en YT), todavía no he terminado de entenderlos.
Uno de ellos consiste en crear una función que pille un array y uno o varios argumentos más y que elimine los otros argumentos del array. Os dejo el ejercicio:
Implement a function that takes an array and some other arguments then removes the other arguments from that array:
removeFromArray([1, 2, 3, 4], 3); // should remove 3 and return [1,2,4]
Hints
The first test on this one is fairly easy, but there are a few things to think about(or google) here for the later tests:
how to remove a single element from an array
how to deal with multiple optional arguments in a javascript function
Check this link. Scroll down to the bit about Array.from or the spread operator. - Or this link.
Hasta ahí bien, el primer test lo pasa fácil, luego vienen los demás:
const removeFromArray = require('./removeFromArray')
describe('removeFromArray', () => {
test('removes a single value', () => {
expect(removeFromArray([1, 2, 3, 4], 3)).toEqual([1, 2, 4]);
});
test.skip('removes multiple values', () => {
expect(removeFromArray([1, 2, 3, 4], 3, 2)).toEqual([1, 4]);
});
test.skip('ignores non present values', () => {
expect(removeFromArray([1, 2, 3, 4], 7, "tacos")).toEqual([1, 2, 3, 4]);
});
test.skip('ignores non present values, but still works', () => {
expect(removeFromArray([1, 2, 3, 4], 7, 2)).toEqual([1, 3, 4]);
});
test.skip('can remove all values', () => {
expect(removeFromArray([1, 2, 3, 4], 1, 2, 3, 4)).toEqual([]);
});
test.skip('works with strings', () => {
expect(removeFromArray(["hey", 2, 3, "ho"], "hey", 3)).toEqual([2, "ho"]);
});
test.skip('only removes same type', () => {
expect(removeFromArray([1, 2, 3], "1", 3)).toEqual([1, 2]);
});
});
Lo que he logrado hacer yo tras googlear, meterme en Stackoverflow y mirar vídeos en YT a punta pala:
const removeFromArray = function(...args) {
const array = args[0];
const nuevoArray = [];
array.forEach((item) => {
if (!args.includes(item)) {
nuevoArray.push(item);
}
})
return nuevoArray;
}
Esto ahora mismo lo podría escribir con los ojos cerrados ya que he estado una semana con estos ejercicios y cada día que pasaba lo borraba y lo empezaba de 0 con la esperanza de mejorar un poco mi lógica, y entiendo el código en buena medida, pero hay cosas que se me escapan.
Aún no he dado las arrow functions pero bueno, me he buscado la vida y al final es lo mismo que una function así que nada, pero conceptos como el if (!args.includes(item)) se me escapan, sé lo que hace el método includes() y también sé lo que hace el !NOT pero en ese contexto no sé bien qué es lo que está pasando.
Ok, forEach funciona como una especie de loop que itera por cada elemento, entonces el !args.includes(item) significa que si el ITEM no está añade el item al final del array? Es bastante lioso y quizás para la mayoría os sea simple pero pffff, es que no lo entiendo.
Me gustaría saber si conocéis de algún sitio web (el inglés no se me da mal pero tampoco soy un hacha lo que significa que me dejo cosas en el camino) o canal de YT que explique bien las cosas.
De momento tiro de javascript.info, documentación de MDN y algunos canales de YT como el de Jon Mircha, Web Dev Simplified o Codificandolo.
Muchas gracias y espero haberme expresado bien xD, que soy un poco imbécil.