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

如何在JavaScript中将数组重复元素合并为对应子数组

实现代码

基础遍历版本(可读性最高)

const originArr = ['a', 'b', 'd', 'a', 'f', 'b', 'a', 'b'];
const groupMap = new Map();

for (const element of originArr) {
  // 首次出现的元素先初始化对应子数组
  if (!groupMap.has(element)) {
    groupMap.set(element, []);
  }
  // 将当前元素推入对应子数组
  groupMap.get(element).push(element);
}

// 提取Map中所有值即为最终结果
const result = Array.from(groupMap.values());
console.log(result); // 输出 [['a','a','a'], ['b','b','b'], ['d'], ['f']]

reduce 链式版本

const originArr = ['a', 'b', 'd', 'a', 'f', 'b', 'a', 'b'];
const result = Array.from(
  originArr.reduce((acc, cur) => {
    acc.has(cur) || acc.set(cur, []);
    acc.get(cur).push(cur);
    return acc;
  }, new Map())
  .values()
);
说明
  • 选择Map而非普通对象存储分组,是因为Map可以严格保留元素在原数组中首次出现的顺序,同时支持任意类型的元素作为键,后续如果数组元素是数字、对象、Symbol等类型也可以正常兼容
  • 最终输出顺序和元素在原数组首次出现的顺序完全匹配,符合需求要求

内容的提问来源于stack exchange,提问作者Егор Лапкин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:27:02