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

如何按指定属性分组MongoDB数据并合并其他属性数组?

前端实现按属性分组并合并其他属性数组的方案

嘿,我来帮你搞定这个分组需求!针对你给出的从MongoDB集合导出的CSV数据(已经解析成对象数组的形式),我们可以用原生JavaScript轻松实现按code字段分组,同时合并numbers和name数组的目标格式。

实现思路

核心思路是先用一个中间映射对象暂存每个code对应的numbers和name数组,最后再把这个映射对象转换成你需要的二维数组结构:

  1. 用Array.reduce()遍历原始数据,按code键分组,收集对应的numbers和name值到数组中
  2. 用Object.entries()把映射对象的键值对转成数组,再通过Array.map()调整成目标格式

完整代码示例

// 假设这是你从CSV解析后的原始数据数组
const rawData = [
  {code: "CHN", numbers: "1000", name: "A"},
  {code: "CHN", numbers: "2000", name: "B"},
  {code: "FRA", numbers: "3000", name: "C"},
  {code: "FRA", numbers: "4000", name: "D"}
];

// 第一步:构建分组映射
const groupedMap = rawData.reduce((acc, currentItem) => {
  // 如果当前code还未在映射中,初始化对应的数组容器
  if (!acc[currentItem.code]) {
    acc[currentItem.code] = { numbers: [], names: [] };
  }
  // 将当前项的numbers和name分别推入对应数组
  acc[currentItem.code].numbers.push(currentItem.numbers);
  acc[currentItem.code].names.push(currentItem.name);
  return acc;
}, {});

// 第二步:转换为目标格式的二维数组
const finalResult = Object.entries(groupedMap).map(([code, data]) => {
  return [code, data.numbers, data.names];
});

console.log(finalResult);
// 输出结果完全符合你的要求:
// [ ["CHN", ["1000", "2000"], ["A", "B"]], ["FRA", ["3000", "4000"], ["C", "D"]] ]

额外优化建议

如果你的原始数据可能存在属性缺失的情况(比如某个item没有numbers或name字段),可以在推入数组前加个简单判断,避免混入undefined:

// 替换push的逻辑
if (currentItem.numbers) {
  acc[currentItem.code].numbers.push(currentItem.numbers);
}
if (currentItem.name) {
  acc[currentItem.code].names.push(currentItem.name);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:33:17