Esto es para un desafío de resolución de Wordle que estoy tratando de usar para mejorar mis habilidades de algoritmo de cadena, pero estoy atascado en cómo puedo hacer que esto funcione para TODOS los caracteres donde los índices coincidirán.
Digamos que tenemos una matriz de palabras.
['ducks', 'treks', 'tests', 'tease'] Sabemos que la primera letra es una T y la segunda letra es una E , por lo que deberíamos obtener ['tests', 'tease'] .
Esto está usando Vue, así que aquí hay una reproducción del componente . A continuación se muestra el método solo.
fetchPotentialWords() { const potentialMatches = [] // Get only words of the correct length let filteredWords = words.filter(x => x.length === this.letterCount) // Iterate correct letters to map their placement this.correctLetters.map((letter, index) => { // Return early if undefined if (letter === undefined) return; // Filter words where indexes match potentialMatches.push(...filteredWords.filter(x => x[index] === letter)) }) return potentialMatches }El problema con este enfoque es que no tiene en cuenta los índices de las letras anteriores, solo se asegura de que la letra de una iteración en particular esté en el índice correcto. ¿Qué me gustaría hacer para asegurarme de que todos los índices coincidan filtrando a medida que se encuentran las coincidencias?
Verifique que .every una de las .correctLetters (si la letra correcta está definida allí) coincida con el índice apropiado. No use .map para los efectos secundarios; dado que está tratando de crear una matriz al verificar cuál de las matrices existentes coincide con una condición, use solo .filter .
fetchPotentialWords(){ return words .filter(word => word.length === this.letterCount && this.correctLetters.every((letter, i) => !letter || word[i] === letter) ); }