Search code examples
javascriptstringfunctioncomparisonanagram

Anagrams finder in javascript


I am supposed to write a program in JavaScript to find all the anagrams within a series of words provided. e.g.:

monk, konm, nkom, bbc, cbb, dell, ledl, llde

The output should be categorised into rows:

1. monk konm, nkom;
2. bbc cbb;
3. dell ledl, llde;

I already sorted them into alphabetical order and put them into an array. i.e.:

kmno kmno bbc bbc dell dell

However I am stuck in comparing and finding the matching anagram within the array.

Any help will be greatly appreciated.


Solution

  • Javascript objects are excellent for this purpose, since they are essentially key/value stores:

    // Words to match
    var words = ["dell", "ledl", "abc", "cba"];
    
    // The output object
    var anagrams = {};
    
    for (var i in words) {
        var word = words[i];
    
        // sort the word like you've already described
        var sorted = sortWord(word);
    
        // If the key already exists, we just push
        // the new word on the the array
        if (anagrams[sorted] != null) {
            anagrams[sorted].push(word);
        } 
        // Otherwise we create an array with the word
        // and insert it into the object
        else {
            anagrams[sorted] = [ word ];
        }
    }
    
    // Output result
    for (var sorted in anagrams) {
        var words = anagrams[sorted];
        var sep = ",";
        var out = "";
        for (var n in words) {
            out += sep + words[n];
            sep = "";
        }
        document.writeln(sorted + ": " + out + "<br />");
    }