如何使用JavaScript从单词数组中查找所有变位词(anagrams)
变位词分组实现方案
你当前的代码逻辑刚好和分组需求相反,你是将原单词作为键、排序后的字符串作为值,正确的分组逻辑应该把排序后的字符串作为分组键,对应的值存储所有属于该组的原单词数组,具体实现如下:
完整实现代码
const words = ['cab', 'bac', 'tru', 'mihir']; const result = {}; words.forEach(word => { // 生成排序后的字符串作为分组唯一标识 const sortedKey = word.split('').sort().join(''); // 若该分组不存在则初始化空数组 if (!result[sortedKey]) { result[sortedKey] = []; } // 将当前单词加入对应分组 result[sortedKey].push(word); }); // 如果你需要过滤掉只有单个单词的分组(和示例输出保持一致),添加以下逻辑 const filteredResult = {}; for (const key in result) { if (result[key].length > 1) { filteredResult[key] = result[key]; } } console.log(filteredResult); // 输出 {abc: ['cab','bac']}
逻辑说明
- 排序后的字符串可以作为变位词的唯一标识,所有互为变位词的单词排序后得到的字符串完全相同
- 以该标识为键存储对应单词数组,即可自动完成变位词的分组
- 额外的过滤逻辑可以按照你的需求决定是否保留,不需要过滤的话直接输出
result即可
内容的提问来源于stack exchange,提问作者user11405997
相关产品推荐
相关产品推荐

