JSFiddle - React, Tailwind, and code Playground

Group anagrams. Dirty.

by Yurii Predborskyi

JavaScript

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
  let dict = [];
  let zero = [[]];
  strs.forEach(word => {
    word = word.split('');
    if(word.length === 0) {
    	zero[0].push('');
      return;
    }
    let found = false;
    for (let j = 0; j < dict.length; ++j) {
      let dictWord = dict[j];
      //console.log('dictword', dictWord.letters.join(''));
      if (word.join('') == 'deb' && dictWord.letters.join('') == 'deb') {
      	console.log('deb == ', word.join(''))
      }
      let matches = 0;
      let temp = [];
      for (let i = 0; i < word.length; ++i) {
        let letter = word[i];
        if (dictWord.letters.includes(letter)) {
          ++matches;
          temp.push( dictWord.letters.splice( dictWord.letters.indexOf(letter), 1 )[0] );
        } else {
        	matches = 0;
        	break;
        }
      }
      dictWord.letters = dictWord.letters.concat(temp);
      if (matches === dictWord.letters.length) {
        /* 
        if (word.join('') === 'pup') {
          console.log('crazy!', dictWord, 'matches', matches);
        } 
        console.log('matches', matches, 'word', word, 'keys', Object.keys(dictWord).length); 
        */
        dictWord.res.push(word.join(''));
        found = true;
        break;
      }
    }
    if (!found) {
    	dict.push({res: [word.join('')]});
      dict[dict.length-1].letters = word;
    }
  });
  let res = dict.map(item => item.res);
  return zero[0].length ? res.concat(zero) : res;
};

let input1 = ["eat", "tea", "tan", "ate", "nat", "bat"];
let input2 = ["",""];
let input3 = ["tea", "and", "ace", "ad", "eat", "dans"];
let input4 = ["ray","cod","abe","ned","arc","jar","owl","pop","paw","sky","yup","fed","jul","woo","ado","why","ben","mys","den","dem","fat","you","eon","sui","oct","asp","ago","lea","sow","hus","fee","yup","eve","red","flo","ids","tic","pup","hag","ito","zoo"];
let input5 =...