String permutations

by LyndseyB

HTML

Take each letter in turn as a prefix
For each letter, append to the prefix and recurse the remaining letters

Babel + JSX

const permute = (source, prefix = '', words = []) => {     
	if(typeof source !== 'string') {
  	throw('Expected string source');
  }
  
  const word = prefix + source;
  const letters = source.split('');

  if(!words.includes(word)) {
 		words.push(word);
  }

	letters.forEach((letter, index) => {
  	const remainder = source.substring(0, index) + source.substring(index + 1);
   	permute(remainder, prefix + letter, words);   
  });

	return words;
};

console.time('perms');
const permutations = permute('ABCD');
console.timeEnd('perms');
console.log(permutations);