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 } = item;

let company = companyMap.get(companyName);
if (!company) {
  company = {
    index: '',
    companyName,
    comanyNo,
    total: 0,
    children: []
  };
  companyMap.set(companyName, company);
  result.push(company);
}
company.total += total;

let project = projectMap.get(projectName);
if (!project) {
  project = {
    index: '',
    projectName,
    projectNo,
    total: 0,
    children: []
  };
  projectMap.set(projectName, project);
  company.children.push(project);
}
project.total += total;

const site = {
  index: '',
  siteName,
  siteNo,
  total
};
project.children.push(site);

}

let companyIndex = 1; let projectIndex = 1; let siteIndex = 1;

for (const company of result) { company.index = ${companyIndex}; companyIndex++;

for (const project of company.children) {
  project.index = `${company.index}-${projectIndex}`;
  projectIndex++;
  
  for (const site of project.children) {
    site.index = `${project.index}-${siteIndex}`;
    siteIndex++;
  }
}

projectIndex = 1;
siteIndex = 1;

}

return result; }

console.log(formatData(data));

JavaScript 递归实现数据格式转换 - 将扁平化数据转化为树形结构

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

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