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 著作权归作者所有。请勿转载和采集!

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