var groupAnagrams = function (strs) { // hash表存的是有哪些组合的单词出现 i是出现时候插入到result数组中的下标 let hash = {}, i = 0, sortItem; let result = []; strs.forEach(item => { sortItem = item; sortItem = sortItem.split(''); // 每一项单词打算排序再组合起来 例如 eat => aet tea => aet... sortItem = sortItem.sort().join(''); // 判断hash中是否存了重组单词的下标 如果存了说明出现过 if (hash[sortItem] >= 0) { result[hash[sortItem]].push(item); // 在result的对应下标中push这一个单词 } else { // 如果hash中还没存这个单词重组后的 说明第一次出现 hash[sortItem] = i; // 将这个单词重组后的词作为key存入hash中 值为存入result的下标i result[i] = [item]; // 在下标为i的地方创建新数组存这个单词 ++i; // 每出现一个新的次 下标+1 方便存下一个新出现的词 } }); return result; };