UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions and classes for everyday development needs.

31 lines (30 loc) 1.16 kB
/** * * Utility to generate unique anagrams of a word. * @param word The word for generating anagrams. * @param limit The maximum number of anagrams to return ('all' for unlimited). Default is `100`. * @returns An array of generated anagrams. The first element is always the given word. Generated anagrams are always in lowercase. */ export function generateAnagrams(word, limit = 100) { if (word?.length <= 1) { return [word?.toLowerCase()]; } const uniqueAnagrams = new Set(); /** * * Helper function to generate permutations. * @param str Current permutation being formed. * @param remaining Remaining characters to process. */ const _permute = (str, remaining) => { if (!remaining?.length) { uniqueAnagrams.add(str); return; } for (let i = 0; i < remaining?.length; i++) { if (limit !== 'all' && uniqueAnagrams.size >= limit) return; _permute(str + remaining[i], remaining?.slice(0, i) + remaining?.slice(i + 1)); } }; _permute('', word.toLowerCase()); return Array.from(uniqueAnagrams); }