The Basic Idea
So with this solution, it’s quite simple, you have your dictionary, then you make a slight change to each object within the dictionary, you basically add some string to it so that if a word is
'card', it’ll swap the order of the letters in such a way that when you search for
'drac', card will appear to be a similar word.
A bit more detail
When you search for words similar to what you’ve got in your dictionary, to prevent outputting exactly what you’ve already searched, when constructing a new array, it’ll push
null onto the array if index
x is the same word as the word searched.
Then, once the array has been constructed, it filters out all values set to
// Simple string sort function. const sort = s => [...s].filter(x => x != null).sort().join(''); // Helper function which will state whether or not to push // a string onto the array or push null onto the array. const push = o => w => sort(o) === sort(w) && o != w ? o : null; // A function that takes an array of words and a word // via the use of currying, then magic happens! const anagrams = d => w => d.map(o => push(o)(w)).filter(s => s != null); // The proof is in the pudding... const dictionary = ['stranger','ngerstra','torarot','rotator']; const word = 'ngerstra'; const otherWord = 'rotator'; const results = anagrams(dictionary)(word); const otherResults = anagrams(dictionary)(otherWord); console.log(results); console.log(otherResults);
solved Insert a string. Create new string which is the mirror reverse of the inserted one around its center