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

将分类转为列名:JavaScript字典列表数据转换问题求助

解决JavaScript字典列表的结构转换问题

嘿,作为JavaScript新手碰到这种数据重组的需求太正常了,我来一步步帮你搞定!

首先先明确我们要达成的目标结构:把原来按category分散的数据,转换成以Year为核心,Exports和Imports作为独立列的数组,最终应该是这样的:

[
  { Year: "2007", Exports: "314,448.7", Imports: "314,448.7" },
  { Year: "2008", Exports: "320,805.2", Imports: "320,805.2" }
]

实现方案:使用Array.reduce()进行分组转换

reduce方法是处理这类数组结构重组的利器,只需要遍历一次数组就能完成转换,效率很高。直接上代码:

// 你的原始数据
const originalData = [
  {Year: "2007", expenditure: "314,448.7", category: "Exports"},
  {Year: "2008", expenditure: "320,805.2", category: "Exports"},
  {Year: "2007", expenditure: "314,448.7", category: "Imports"},
  {Year: "2008", expenditure: "320,805.2", category: "Imports"}
];

// 执行转换
const transformedData = Object.values(
  originalData.reduce((acc, item) => {
    // 如果当前年份还没在累加器里,先初始化一个基础对象
    if (!acc[item.Year]) {
      acc[item.Year] = { Year: item.Year };
    }
    // 将当前分类的支出数据赋值到对应字段
    acc[item.Year][item.category] = item.expenditure;
    return acc;
  }, {}) // 初始化累加器为一个空对象
);

// 输出结果
console.log(transformedData);

代码解释

  1. reduce的累加器(acc):我们用它来临时存储以年份为键的对象,比如{"2007": {Year: "2007", Exports: "...", Imports: "..."}}
  2. 初始化年份条目:如果当前年份还没在累加器里,就创建一个包含Year字段的新对象
  3. 赋值分类数据:把当前条目的expenditure值,对应到年份对象的category字段下
  4. 转换为最终数组:用Object.values()把累加器里的对象值提取出来,变成我们需要的数组结构

额外优化:把支出字符串转成数字

如果后续需要对支出数据做计算,可以把带逗号的字符串转换成数字,只需要修改赋值那一行:

// 移除逗号并转成浮点数
const cleanExpenditure = parseFloat(item.expenditure.replace(/,/g, ''));
acc[item.Year][item.category] = cleanExpenditure;

这样转换后的支出就是数字类型,方便后续做统计、图表展示等操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:45:12