PROBLEMA: Dos palabras son anagramas entre sí si ambas contienen las mismas letras. Por ejemplo:
'abba' & 'bbaa' == true 'abba' & 'abbba' == false 'abba' & 'abca' == falseEscribe una función que encuentre todos los anagramas de una palabra de una lista. Se le darán dos entradas, una palabra y una matriz con palabras. Debe devolver una matriz de todos los anagramas o una matriz vacía si no hay ninguno. Por ejemplo:
anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) => ['carer', 'racer'] anagrams('laser', ['lazing', 'lazy', 'lacer']) => []MI SOLUCIÓN:
function anagrams(word, words){ let array = []; let answer = []; for(i in words){ array.push(words[i].split('').sort().join('')); } for(i in array){ if(word == array[i]){ answer.push(words[i]); } return answer; } }Sin embargo, esto solo devuelve una matriz vacía. ¿Qué está mal con mi código?
Ordene su word , haga coincidir cada sorted(item) en la matriz de words con su word ordenada, empuje a la matriz final y regrese, he separado la clasificación en una función diff para una mejor comprensión
function clean(str) { return str.replace(/[^\w]/g).toLowerCase().split('').sort().join(); } function anagrams(word, words) { let answer = []; for (i in words) { if (clean(word) == clean(words[i])) answer.push(words[i]); } return answer; } console.log(anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer'])); console.log(anagrams('laser', ['lazing', 'lazy', 'lacer']));