JavaScript 函数封装:将数据分组并汇总
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));
原文地址: https://www.cveoy.top/t/topic/peqC 著作权归作者所有。请勿转载和采集!