将分类转为列名: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);
代码解释
reduce的累加器(acc):我们用它来临时存储以年份为键的对象,比如{"2007": {Year: "2007", Exports: "...", Imports: "..."}}- 初始化年份条目:如果当前年份还没在累加器里,就创建一个包含
Year字段的新对象 - 赋值分类数据:把当前条目的
expenditure值,对应到年份对象的category字段下 - 转换为最终数组:用
Object.values()把累加器里的对象值提取出来,变成我们需要的数组结构
额外优化:把支出字符串转成数字
如果后续需要对支出数据做计算,可以把带逗号的字符串转换成数字,只需要修改赋值那一行:
// 移除逗号并转成浮点数 const cleanExpenditure = parseFloat(item.expenditure.replace(/,/g, '')); acc[item.Year][item.category] = cleanExpenditure;
这样转换后的支出就是数字类型,方便后续做统计、图表展示等操作。
内容的提问来源于stack exchange,提问作者Michael Ro
相关产品推荐
相关产品推荐

