Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

204
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda