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

131
Vistas
Estoy buscando una forma eficiente de eliminar elementos de una matriz de JavaScript si están presentes en otra matriz. Usando indexOf

Quiero eliminar esos elementos de arr_2 que contienen el nombre de dominio de arr_1

 let arr_1 = ["domain1.com", "domain2.com"]; let arr_2 = [ "domain1.com/about-us", "domain3.com/contact-us", "domain4.com/privacy-policy", "domain2.com/pricing-plans", "sub.domain2.com/home-1", ]; let filtered_arr = []; arr_2.forEach((item) => { if (item.indexOf(arr_1) == -1) { filtered_arr.push(item); } }); console.log(filtered_arr);

quiero el resultado ["domain3.com/contact-us", "domain4.com/privacy-policy"] de este código, pero imprime todo el arr_2

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Su código en este momento está devolviendo el arr_2 completo porque su lógica de filtrado no verifica si cada elemento de arr_2 contiene una de las cadenas coincidentes en arr_1 .

indexOf(arr_1) esencialmente busca cada elemento en arr_2 para la matriz arr_1 completa. La función siempre devolverá -1 porque cada elemento de arr_2 es una cadena y nunca coincidirá con toda la matriz arr_1 .

Supongo que también querrá revisar cada elemento en arr_1 , por lo que probablemente debería hacer arr_1.forEach((item1) => { }) dentro del ciclo forEach para arr_2 , y hacer el control indexOf dentro de este ciclo interno.

about 4 years ago · Juan Pablo Isaza Denunciar

0

No puede llamar a indexOf en una cadena y pasar una matriz como argumento.
Debe usar find para verificar si item tiene un dominio de arr_1 .
Y es un código mucho más limpio usando filter que forEach .

 let arr_1 = ["domain1.com", "domain2.com"]; let arr_2 = [ "domain1.com/about-us", "domain3.com/contact-us", "domain4.com/privacy-policy", "domain2.com/pricing-plans", "sub.domain2.com/home-1", ]; let filtered_arr = arr_2.filter(item => { return !arr_1.find(domain => item.includes(domain)); }); console.log(filtered_arr);

Nota: Esto también filtraría "example.com/domain1.com".

about 4 years ago · Juan Pablo Isaza Denunciar

0

puedes lograrlo usando some filter e includes

 let arr_1 = ["domain1.com", "domain2.com"]; let arr_2 = [ "domain1.com/about-us", "domain3.com/contact-us", "domain4.com/privacy-policy", "domain2.com/pricing-plans", "sub.domain2.com/home-1", ]; const arr3 = arr_2.filter(url => !arr_1.some(domain => url.includes(domain))) console.log(arr3)

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