Necesito ayuda para filtrar una matriz de Javascript para eliminar nombres que NO incluyan al menos una de una serie de letras enumeradas en una segunda matriz. Lo he intentado una y otra vez, usando combinaciones de filter(), y también bucles FOR anidados. EJEMPLO:
nombre = ["chuck","lina","wanda","denise","reggie","candy"];
letra = ["h","l","z","e"];
La matriz devuelta por filter() debería ser:
nombredos = ["wanda","caramelo"];
Es simple de explicar, pero simplemente no puedo hacer que funcione en el código. He encontrado muchos ejemplos de filter() aquí, pero ninguno me ha ayudado. ¡Gracias!
Para buscar letras dentro de una cadena, debe usar la función indexOf.
Si desea una solución de una línea, puede hacerlo de esta manera:
const names = ["chuck","lina","wanda","denise","reggie","candy"]; const letters = ["h","l","z","e"]; const result = names.filter(name => letters.filter(letter => name.indexOf(letter) !== -1).length === 0); console.log(result)Y puedes hacerlo usando dos ciclos:
const names = ["chuck","lina","wanda","denise","reggie","candy"]; const letters = ["h","l","z","e"]; const result = []; for (let i = 0; i < names.length; i++) { let isContainLetter = false; for (let j = 0; j < letters.length; j++) { if (names[i].indexOf(letters[j]) !== -1) { isContainLetter = true; break; } } if (!isContainLetter) result.push(names[i]); } console.log(result)Puede filtrar con every y verificar si el nombre no contiene letras.
const names = ["chuck", "lina", "wanda", "denise", "reggie", "candy"], letters = ["h", "l", "z", "e"], result = names.filter(n => letters.every(l => !n.includes(l))); console.log(result); // ["wanda", "candy"]