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

如何在JavaScript中将对象数组转换为指定结构的新数组?

解决方法

首先假设你的原始数据结构类似这样(如果和实际不符,只需调整字段匹配即可):

const originalData = [
  {
    CountryName: "美国",
    SourceName: "石油",
    2011: 500,
    2012: 520,
    2013: 510,
    2014: 530,
    2015: 525,
    2016: 540
  },
  {
    CountryName: "中国",
    SourceName: "煤炭",
    2011: 800,
    2012: 850,
    2013: 870,
    2014: 860,
    2015: 840,
    2016: 830
  }
];

使用map方法完成转换:

const transformedData = originalData.map(item => {
  // 解构分离固定字段和年度数据
  const { CountryName, SourceName, ...yearlyValues } = item;
  
  // 将年度键值对转为包含年份和数值的数组元素
  const data = Object.entries(yearlyValues).map(([year, value]) => ({
    year: Number(year),
    value: value
  }));
  
  return { CountryName, SourceName, data };
});

关键步骤说明:

  • 解构赋值:快速把CountryName、SourceName从原对象中分离,剩下的所有年度字段自动归入yearlyValues对象。
  • Object.entries():把年度数据的键(年份)和值(能源数据)转换成二维数组,方便后续处理。
  • 二次map:将每个年度键值对转换成结构化的对象,确保年份是数字类型(原数据中年份是字符串键,转成数字更实用)。

若只需数值数组的data:

如果你的data不需要年份,仅需要2011-2016的数值按顺序排列,可以用指定年份数组提取:

const transformedData = originalData.map(item => {
  const { CountryName, SourceName } = item;
  const years = [2011, 2012, 2013, 2014, 2015, 2016];
  const data = years.map(year => item[year]);
  
  return { CountryName, SourceName, data };
});

这样处理后,就能得到符合需求的新对象数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:55:09