function processData(data) { let result = [];

// 以公司名称和公司编号作为键值对,存储每个公司的信息 let companyMap = new Map();

for (let i = 0; i < data.length; i++) { let item = data[i];

// 检查公司是否已存在,不存在则创建
if (!companyMap.has(item.companyName)) {
  companyMap.set(item.companyName, {
    companyName: item.companyName,
    companyNo: item.comanyNo,
    total: 0,
    children: []
  });
}

let company = companyMap.get(item.companyName);

// 检查项目是否已存在,不存在则创建
let projectIndex = company.children.findIndex(child => child.projectName === item.projectName && child.projectNo === item.projectNo);
if (projectIndex === -1) {
  company.children.push({
    projectName: item.projectName,
    projectNo: item.projectNo,
    total: 0,
    children: []
  });
  projectIndex = company.children.length - 1;
}

let project = company.children[projectIndex];

// 检查场地是否已存在,不存在则创建
let siteIndex = project.children.findIndex(child => child.siteName === item.siteName && child.siteNo === item.siteNo);
if (siteIndex === -1) {
  project.children.push({
    siteName: item.siteName,
    siteNo: item.siteNo,
    total: 0
  });
  siteIndex = project.children.length - 1;
}

let site = project.children[siteIndex];

// 更新场地的总数
site.total += item.total;

// 更新项目的总数
project.total += item.total;

// 更新公司的总数
company.total += item.total;

}

// 将公司信息从 Map 转换为数组 for (let [key, value] of companyMap) { result.push(value); }

return result; }

console.log(processData(data));

JavaScript 函数封装:将数据分组并汇总

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

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