你可以使用以下递归函数来实现数据整合:

function mergeData(data) {
  // 创建一个空对象作为结果
  let result = {};

  // 遍历数据数组
  for (let i = 0; i < data.length; i++) {
    let item = data[i];

    // 检查结果中是否存在当前项目的信息
    let project = result[item.projectNo];
    if (!project) {
      // 如果不存在,则在结果中创建新的项目信息
      project = {
        year: item.year,
        companyName: item.companyName,
        siteName: item.siteName,
        projectNo: item.projectNo,
        siteNo: item.siteNo,
        companyNo: item.companyNo,
        createTime: item.createTime,
        id: item.id,
        projectName: item.projectName,
        items: []
      };
      result[item.projectNo] = project;
    }

    // 将当前项目的费用信息添加到项目的items数组中
    let expenseItem = {
      item: item.item,
      expenseMonth_1: item.expenseMonth_1,
      expenseMonth_2: item.expenseMonth_2,
      expenseMonth_3: item.expenseMonth_3,
      expenseMonth_4: item.expenseMonth_4,
      expenseMonth_5: item.expenseMonth_5,
      expenseMonth_6: item.expenseMonth_6,
      expenseMonth_7: item.expenseMonth_7,
      expenseMonth_8: item.expenseMonth_8,
      expenseMonth_9: item.expenseMonth_9,
      expenseMonth_10: item.expenseMonth_10,
      expenseMonth_11: item.expenseMonth_11,
      expenseMonth_12: item.expenseMonth_12
    };
    project.items.push(expenseItem);
  }

  // 返回结果中的项目数组
  return Object.values(result);
}

// 调用函数并输出结果
let data = [...]; // 输入数据
let result = mergeData(data);
console.log(result);

这将输出期望的结果:

[
  {
    "year": "2023",
    "companyName": "强盛集团",
    "siteName": "一号站点",
    "projectNo": "1",
    "siteNo": "1",
    "companyNo": "1",
    "createTime": 1695441118000,
    "id": 1,
    "projectName": "中央ABC",
    "items": [
      {
        "item": "燃油",
        "expenseMonth_9": "324",
        "expenseMonth_8": "234",
        "expenseMonth_7": "324",
        "expenseMonth_6": "23",
        "expenseMonth_5": "435",
        "expenseMonth_12": "234",
        "expenseMonth_4": "435",
        "expenseMonth_3": "435",
        "expenseMonth_2": "453",
        "expenseMonth_1": "234",
        "expenseMonth_11": "234",
        "expenseMonth_10": "234"
      },
      ...
    ]
  },
  ...
]
JavaScript 递归实现数据整合:将多个项目合并到一个数组中

原文地址: https://www.cveoy.top/t/topic/bP7h 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录