const data = [ { companyName: '固废处理公司', comanyNo: '111 ', projectName: '主城区应急填埋', projectNo: '111 ', siteName: '洛城清理场', siteNo: '111 ', total: 30, a: 111, b: 111, }, { companyName: '固废处理公司', comanyNo: '111 ', projectName: '主城区应急填埋', projectNo: '111 ', siteName: '黑石子填埋场', siteNo: '112 ', total: 50, a: 111, b: 111, }, { companyName: '固废处理公司', comanyNo: '111 ', projectName: '其他区域应急填埋', projectNo: '112 ', siteName: '花溪填埋场', siteNo: '113', total: 100, a: 111, b: 111, }, { companyName: '固废运输公司', comanyNo: '222 ', projectName: '市级转运', projectNo: '222 ', siteName: '界石站', siteNo: '222 ', total: 100, a: 111, b: 111, }, { companyName: '固废运输公司', comanyNo: '222 ', projectName: '市级转运', projectNo: '222 ', siteName: '走马站', siteNo: '223 ', total: 60, a: 111, b: 111, }, { companyName: '固废运输公司', comanyNo: '222 ', projectName: '市级转运', projectNo: '222 ', siteName: '夏家坝站', siteNo: '224 ', total: 30, a: 111, b: 111, }, { companyName: '固废运输公司', comanyNo: '222 ', projectName: '市级转运', projectNo: '222 ', siteName: '西永站', siteNo: '225 ', total: 80, a: 111, b: 111, }, { companyName: '固废运输公司', comanyNo: '222 ', projectName: '高校餐厨转运', projectNo: '223 ', siteName: '西永站', siteNo: '226 ', total: 80, a: 111, b: 111, }, { companyName: '固废运输公司', comanyNo: '222 ', projectName: '渝北区餐厨转运', projectNo: '224 ', siteName: '冉家坝站', siteNo: '227 ', total: 180, a: 111, b: 111, }, ]

const result = [ { companyName: '固废处理公司', comanyNo: '111 ', total: 180, children: [ { projectName: '主城区应急填埋', projectNo: '111 ', total: 80, children: [ { siteName: '洛城清理场', siteNo: '111 ', total: 30, a: 111, b: 111, }, { siteName: '黑石子填埋场', siteNo: '112 ', total: 50, a: 111, b: 111, } ] }, { projectName: '其他区域应急填埋', projectNo: '112 ', siteName: '花溪填埋场', siteNo: '113', total: 100, a: 111, b: 111, } ] }, { companyName: '固废运输公司', comanyNo: '222 ', total: 530, children: [ { projectName: '市级转运', projectNo: '222 ', total: 270, children: [ { projectName: '市级转运', projectNo: '222 ', siteName: '界石站', siteNo: '222 ', total: 100, a: 111, b: 111, }, { projectName: '市级转运', projectNo: '222 ', siteName: '走马站', siteNo: '223 ', total: 60, a: 111, b: 111, }, { projectName: '市级转运', projectNo: '222 ', siteName: '夏家坝站', siteNo: '224 ', total: 30, a: 111, b: 111, }, { projectName: '市级转运', projectNo: '222 ', siteName: '西永站', siteNo: '225 ', total: 80, a: 111, b: 111, } ] }, { projectName: '高校餐厨转运', projectNo: '223 ', siteName: '西永站', siteNo: '226 ', total: 80, a: 111, b: 111, }, { projectName: '渝北区餐厨转运', projectNo: '224 ', siteName: '冉家坝站', siteNo: '227 ', total: 180, a: 111, b: 111, } ] } ]

// js封装函数实现输入数据data,期望输出结果result内容:function formatData(data) { const result = [];

const companyMap = new Map();
const projectMap = new Map();

for (const item of data) {
  const { companyName, comanyNo, projectName, projectNo, siteName, siteNo, total, a, b } = item;

  if (!companyMap.has(companyName)) {
    const company = {
      companyName,
      comanyNo,
      total: 0,
      children: [],
    };
    result.push(company);
    companyMap.set(companyName, company);
  }

  const company = companyMap.get(companyName);
  company.total += total;

  if (!projectMap.has(projectName)) {
    const project = {
      projectName,
      projectNo,
      total: 0,
      children: [],
    };
    company.children.push(project);
    projectMap.set(projectName, project);
  }

  const project = projectMap.get(projectName);
  project.total += total;

  const site = {
    siteName,
    siteNo,
    total,
    a,
    b,
  };
  project.children.push(site);
}

return result;

}

const result = formatData(data); console.log(result);

固废处理和运输数据结构化展示 - 优化后的数据结构示例

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

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