JSFiddle - React, Tailwind, and code Playground

by LyndseyB

Babel + JSX

const Module = (() => {
	const Trie = {
    a: {
      r: {
        t: {
          $: 1,
          s: {
            $: 1,
            y: {
              $: 1
            }
          },        
          y: {
            $: 1
          }
        },
        m: {
          $: 1,
          s: {
            $: 1
          },
          y: {
            $: 1
          }
        }
      },
      y: {
      	s: {
        	$: 1
        }
      }
    }
  };
  
  const recurseSuffix = (suffix, nodes, currentWord = '', wordList = [], suffixArray = null, isSuffix = false) => {  
    
    if(suffixArray === null) {
    	suffixArray = suffix.split('');      
    }    
    
    for(const node in nodes) {      
     	if(node === '$' && isSuffix) {            
        wordList.push(currentWord);
        sufifixArray = suffix.split('');        
      }  
      
    	if(node === suffixArray[0]) {   
      	isSuffix = true;
      	suffixArray.shift(); 
      	recurseSuffix(suffix, nodes[node], currentWord + node, wordList, suffixArray, isSuffix);  
      }     
         
    }	 
    return wordList;
  };
  
  const suffixSearch = (suffix, trie = Trie) => {
		const wordList = recurseSuffix(suffix, trie);
    return wordList;
	};
  
  return { suffixSearch };
}());

// artsy, arty, army
console.time('suffixSearch');
const suffixes = Module.suffixSearch('y');
console.timeEnd('suffixSearch');
console.log(suffixes);