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

如何使用JavaScript flatMap优化多部门公司数据的拆分逻辑?

按部门拆分公司记录的简洁实现

需求背景

给定如下公司数据结构,需要将每个公司按其所属部门拆分,每个部门对应一条独立的公司记录,记录名称格式为「公司名称 - 部门名称」,其余字段保留原公司的完整信息。

原始数据

var companies = [
  {name: 'company 1', depts : ['dept1', 'dept2'], address: 'address1'},
  {name: 'company 2', depts : ['dept2', 'dept3'], address: 'address2'},
];

期望输出

[
  {name: 'company 1 - dept1', depts :  ['dept1', 'dept2'], address: 'address1'},
  {name: 'company 1 - dept2', depts :  ['dept1', 'dept2'], address: 'address1'},
  {name: 'company 2 - dept2', depts :  ['dept2', 'dept3'], address: 'address2'},
  {name: 'company 2 - dept3', depts : ['dept2', 'dept3'], address: 'address2'},
];

现有实现

目前通过两步操作完成需求,但可以进一步简化:

companies.forEach(company => company.displayCompanies = company.depts.map(
  dept => Object.assign({}, company, {name: `${company.name} - ${dept}`})))

var newCompanies = companies.flatMap(company => company.displayCompanies )

优化后的简洁实现

可以直接用flatMap一步完成映射与扁平化,同时避免修改原数据对象:

const newCompanies = companies.flatMap(company => 
  company.depts.map(dept => ({ ...company, name: `${company.name} - ${dept}` }))
);

优化点说明

  • 合并了原有的「添加临时属性」和「扁平化」两步操作,逻辑更紧凑
  • 使用对象展开语法{...company}替代Object.assign({}, company),代码更简洁易读
  • 不会修改原companies数组中的对象,保持原始数据的纯净性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:00:04