Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

197
Vistas
La declaración if en el ciclo anidado detiene mi función

Estoy escribiendo una función que toma como primer argumento una matriz ( arr1 ) y luego N cantidad de argumentos ( arr2 ), por lo que elimina los N argumentos ( arr2 ) de la matriz ( arr1 ). La función parece estar haciendo el trabajo, excepto que se detiene inmediatamente cuando la declaración if se vuelve verdadera. Lo sé porque si elimino la instrucción if, los bucles se iteran hasta el final. ¿Alguna idea de lo que hice mal?

Entonces, debajo de la matriz devuelta debería estar ['A', 'B', 'E'].

 const removeFromArray = function(arr1, arr2) { let arr_new = arr1; first_loop: for (const [y, elem] of arr1.entries()) { for (let i=1; i<arguments.length; i++) { if ((elem === arguments[i])) { arr_new.splice(y); } } } return arr_new; } alert(removeFromArray(['A', 'B', 'C', 'D','E'],'C','D'));
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

splice modifique la matriz original para que cuando la llame. Simplemente elimina todos los elementos de y hasta el final de arr_new y arr_new se refiere a arr1 .

 const foo = [1, 2, 3, 4]; foo.splice(2); console.log(foo); // [1, 2]

arr1.entries() es un iterador que continúa rastreando arr1 internamente, por lo que cuando modifica arr1 también modificará entries , por lo que su ciclo se detiene: no hay elementos después del empalme

Para solucionar este problema, puede modificar su código

 if ((elem === arguments[i])) { arr_new.splice(y, /*👉 remove only one element*/1); }

⚠️ La solución Ps anterior todavía tiene problemas con los índices porque modifica la matriz original y retransmite en ese índice. Esto conduce a un resultado general incorrecto.

Esta es la solución adecuada para eliminar de la matriz, sin modificaciones y con una mejor complejidad O (n)

 const removeFromArray = function(arr1, ...arr2) { const exclude = arr2.reduce((acc, curr) => { acc.add(curr); return acc; }, new Set()); return arr1.filter((it) => { return !exclude.has(it) }); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay una versión alternativa de lo que está tratando de lograr. Si bien las funciones de flecha no tienen arguments , aún puede emularlas a través de rest parameters . Entonces puedes usar un filtro

 const removeFromArray = (...args) => { let arr1 = args[0], arr2 = args.slice(1) return arr1.filter(a => arr2.indexOf(a) === -1) } console.log(removeFromArray(['A', 'B', 'C', 'D', 'E'], 'C', 'D'));

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda