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
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.
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".
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)