固废处理和运输数据结构转换示例
let input = [{'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': 112, 'b': 112 }, {'companyName': '固废处理公司', 'comanyNo': '111 ', 'projectName': '其他区域应急填埋', 'projectNo': '112 ', 'siteName': '花溪填埋场', 'siteNo': '113', 'total': 100, 'a': 113, 'b': 113 }, {'companyName': '固废运输公司', 'comanyNo': '222 ', 'projectName': '市级转运', 'projectNo': '222 ', 'siteName': '界石站', 'siteNo': '222 ', 'total': 100, 'a': 214, 'b': 213 }, {'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 }] let output = [{'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封装函数实现 输入数据input,输出结果output内容:function transformData(input) { let output = []; let companyMap = {}; // 用于存储公司名称和编号的映射关系
for (let i = 0; i < input.length; i++) { let company = input[i].companyName; let companyNo = input[i].comanyNo;
if (!companyMap[company]) {
companyMap[company] = {
companyName: company,
companyNo: companyNo,
total: 0,
children: []
};
output.push(companyMap[company]);
}
let projectMap = {};
let companyNode = companyMap[company];
if (!projectMap[company]) {
projectMap[company] = {};
companyNode.children.push(projectMap[company]);
}
let project = input[i].projectName;
let projectNo = input[i].projectNo;
if (!projectMap[project]) {
projectMap[project] = {
projectName: project,
projectNo: projectNo,
total: 0,
children: []
};
companyNode.total += 1;
projectMap[company].children.push(projectMap[project]);
}
let site = input[i].siteName;
let siteNo = input[i].siteNo;
if (!projectMap[project][site]) {
projectMap[project][site] = {
siteName: site,
siteNo: siteNo,
total: 0,
a: input[i].a,
b: input[i].b
};
projectMap[project].total += 1;
projectMap[project][site].total += 1;
}
companyNode.total += 1;
projectMap[company].total += 1;
projectMap[project][site].total += 1;
}
return output; }
console.log(transformData(input));
原文地址: https://www.cveoy.top/t/topic/petR 著作权归作者所有。请勿转载和采集!