You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于字符组成模式对JavaScript数组中的字符串元素进行分组?

实现思路

你的分组规则本质是将互为变位词(字符组成完全相同、仅顺序不同)的字符串归为同一组,长度不同的字符串必然不属于同一组。通用实现的核心是为每个字符串生成唯一的分组标识,同组字符串的标识完全一致:

  • 把每个字符串拆分为字符数组,按字母顺序排序后重新拼接为字符串,作为分组标识
  • 比如abc、bca、acb排序后拼接的结果都是abc,属于同一组;bdc、cbd排序后拼接结果都是bcd,属于同一组
  • 用映射结构存储分组,键为上述分组标识,值为对应组的字符串数组
  • 遍历完成后提取映射中所有值,即可得到最终分组结果
可用实现代码
const sequence = ["abc", "abcd", "bca", "bdc", "cbd", "bdc", "acb"];

// 生成分组标识的工具函数
function getGroupKey(str) {
  return str.split('').sort().join('');
}

// 使用Map存储分组可保留分组首次出现的顺序
const groupMap = new Map();
for (const item of sequence) {
  const key = getGroupKey(item);
  if (!groupMap.has(key)) {
    groupMap.set(key, []);
  }
  groupMap.get(key).push(item);
}

// 提取所有分组得到最终结果
const finalSequence = Array.from(groupMap.values());
console.log(finalSequence);

运行后输出和你给出的期望结果一致。如果需要调整分组的输出顺序,只需对finalSequence做二次排序即可。

原有代码的问题
  • 硬编码了3个存储分组的变量,无法适配分组数量变化的测试用例
  • 循环逻辑存在缺陷,forEach内部循环每次都会覆盖三个数组的值,最终拿到的只是遍历到最后一个元素时的计算结果,不具备通用性

内容的提问来源于stack exchange,提问作者MiniDracaena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:24:08