固废处理和运输数据结构化展示 - 优化后的数据结构示例
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 著作权归作者所有。请勿转载和采集!