// 递归函数实现 function generateResult(data) { const result = []; const map = {};

data.forEach((item) => { const { companyName, comanyNo, projectName, projectNo, siteName, siteNo, total } = item;

if (!map[companyName]) {
  const companyIndex = Object.keys(map).length + 1;
  map[companyName] = {
    index: `${companyIndex}`,
    companyName,
    comanyNo,
    total: 0,
    children: [],
  };
  result.push(map[companyName]);
}

const company = map[companyName];

if (!company.children.find((child) => child.projectName === projectName && child.projectNo === projectNo)) {
  const projectIndex = company.children.length + 1;
  company.children.push({
    index: `${company.index}-${projectIndex}`,
    projectName,
    projectNo,
    total: 0,
    children: [],
  });
}

const project = company.children.find((child) => child.projectName === projectName && child.projectNo === projectNo);

if (!project.children.find((child) => child.siteName === siteName && child.siteNo === siteNo)) {
  const siteIndex = project.children.length + 1;
  project.children.push({
    index: `${project.index}-${siteIndex}`,
    siteName,
    siteNo,
    total: 0,
  });
}

const site = project.children.find((child) => child.siteName === siteName && child.siteNo === siteNo);
site.total += total;
project.total += total;
company.total += total;

});

return result; }

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

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

JavaScript递归实现数据结构转换 - 将扁平数据转换为树状结构

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

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