JSFiddle - React, Tailwind, and code Playground

by ronilan

HTML

<pre>
  /**
# given a list of words, write a function which
# takes in the list, and groups the words together
# according to which ones are anagrams of eachother
# e.g.
# input = ["art", "rat", "bats", "banana", "stab", "tar"]
# output = [["art", "rat", "tar], ["bats", "stab"], ["banana"]]
*/
</pre>

JavaScript

/**
# given a list of words, write a function which
# takes in the list, and groups the words together
# according to which ones are anagrams of eachother
# e.g.
# input = ["art", "rat", "bats", "banana", "stab", "tar"]
# output = [["art", "rat", "tar], ["bats", "stab"], ["banana"]]
*/


function isAnagaram(wordA, wordB) {

    var arrA = wordA.split("").sort().join(),
        arrB = wordB.split("").sort().join(),
        result = false;

    if (arrA === arrB) {
        result = true;
    }

    return result;

}

function groupAnagrams(wordArray) {

    var i,
    j,
    k,
    groupCount = 0,
        max = wordArray.length,
        skip = false,
        skipIndex = [],
        result = [];

    //every word in array
    for (i = 0; i < max; i++) {

        // was it alreay matched to another?
        for (k = 0; k < skipIndex.length; k++) {
            if (i === skipIndex[k]) {
                skip = true;
            }
        }

        // if not
        if (!skip) {

            // put new word in group
            result.push([]);
            result[groupCount].push(wordArray[i]);

            // search all words forward
            for (j = i + 1; j < max; j++) {

                // if anagram push and note matched word
                if (isAnagaram(wordArray[i], wordArray[j])) {
                    result[groupCount].push(wordArray[j]);
                    skipIndex.push(j);
                }

            }

            groupCount++;
        }

        skip = false;

    }

    return result;
}


var input = ["art", "rat", "bats", "banana", "stab", "tar"];
console.log(groupAnagrams(input));

var input = ["art", "fart", "mart", "tram", "rat", "bats", "banana", "stab", "tar"];
console.log(groupAnagrams(input));

var input = ["art", "fart", "mart", "tram", "aa", "aa", "rat", "bats", "banana", "stab", "tar"];
console.log(groupAnagrams(input));