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

如何将对象数组转换为按部门合并名称的短数组?

按部门合并对象数组中的名称字段

原始数组

[
 { 
  department:"Reviewer",
  name:"John"
 },
 { 
  department:"Reviewer",
  name:"Carol"
 },
 { 
  department:"Reviewer",
  name:"June"
 },
 { 
  department:"Assistant Reviewer",
  name:"Mac"
 },
 { 
  department:"Assistant Reviewer",
  name:"Issac"
 }
]

期望转换结果

[
     { 
      department:"Reviewer",
      name:"John;Carol;June;"
     },
     { 
      department:"Assistant Reviewer",
      name:"Mac;Issac;"
     },
]

你的代码问题分析

你之前的写法存在两处关键问题:

  1. new Set(obj.department) 语法错误,obj是数组,无法直接取department属性,应该先遍历数组提取每个元素的department值
  2. map回调里的逻辑没有关联部门与对应名称的关系,也未实现同部门名称的累加拼接

正确实现方法

方法一:使用reduce高效分组(推荐)

const arr = [
 { department:"Reviewer", name:"John" },
 { department:"Reviewer", name:"Carol" },
 { department:"Reviewer", name:"June" },
 { department:"Assistant Reviewer", name:"Mac" },
 { department:"Assistant Reviewer", name:"Issac" }
];

// 按部门分组,收集对应名称数组
const groupedData = arr.reduce((accumulator, current) => {
  // 若当前部门未在分组中,初始化空数组
  if (!accumulator[current.department]) {
    accumulator[current.department] = [];
  }
  // 将当前名称加入对应部门的数组
  accumulator[current.department].push(current.name);
  return accumulator;
}, {});

// 将分组对象转换为目标数组格式
const mergedResult = Object.entries(groupedData).map(([dept, names]) => ({
  department: dept,
  name: names.join(';') + ';' // 拼接名称并添加末尾分号
}));

console.log(mergedResult);

方法二:先取唯一部门再拼接名称(逻辑直观)

const arr = [/* 原始数组 */];

// 获取所有唯一部门
const uniqueDepartments = [...new Set(arr.map(item => item.department))];

// 遍历每个部门,筛选并拼接对应名称
const mergedResult = uniqueDepartments.map(dept => ({
  department: dept,
  name: arr
           .filter(item => item.department === dept)
           .map(item => item.name)
           .join(';') + ';'
}));

两种方法都能实现需求,方法一的reduce只遍历数组一次,性能更优;方法二逻辑更易懂,适合数据量较小的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:45:37