固废处理和运输数据统计分析 - 公司、项目、站点数据汇总
const data = [
{
companyName: '固废处理公司',
comanyNo: '111 ',
projectName: '主城区应急填埋',
projectNo: '111 ',
siteName: '洛城清理场',
siteNo: '111 ',
total: 30,
a: 10,
b: 20,
},
{
companyName: '固废处理公司',
comanyNo: '111 ',
projectName: '主城区应急填埋',
projectNo: '111 ',
siteName: '黑石子填埋场',
siteNo: '112 ',
total: 50,
a: 20,
b: 30,
},
{
companyName: '固废处理公司',
comanyNo: '111 ',
projectName: '其他区域应急填埋',
projectNo: '112 ',
siteName: '花溪填埋场',
siteNo: '113',
total: 100,
a: 40,
b: 60,
},
{
companyName: '固废运输公司',
comanyNo: '222 ',
projectName: '市级转运',
projectNo: '222 ',
siteName: '界石站',
siteNo: '222 ',
total: 100,
a: 80,
b: 20,
},
{
companyName: '固废运输公司',
comanyNo: '222 ',
projectName: '市级转运',
projectNo: '222 ',
siteName: '走马站',
siteNo: '223 ',
total: 60,
a: 30,
b: 30,
},
{
companyName: '固废运输公司',
comanyNo: '222 ',
projectName: '市级转运',
projectNo: '222 ',
siteName: '夏家坝站',
siteNo: '224 ',
total: 30,
a: 20,
b: 10,
},
{
companyName: '固废运输公司',
comanyNo: '222 ',
projectName: '市级转运',
projectNo: '222 ',
siteName: '西永站',
siteNo: '225 ',
total: 80,
a: 10,
b: 70,
},
{
companyName: '固废运输公司',
comanyNo: '222 ',
projectName: '高校餐厨转运',
projectNo: '223 ',
siteName: '西永站',
siteNo: '226 ',
total: 80,
a: 70,
b: 10,
},
{
companyName: '固废运输公司',
comanyNo: '222 ',
projectName: '渝北区餐厨转运',
projectNo: '224 ',
siteName: '冉家坝站',
siteNo: '227 ',
total: 180,
a: 40,
b: 140,
},
]
const result = [
{
companyName: '固废处理公司',
comanyNo: '111 ',
total: 180,
children: [
{
projectName: '主城区应急填埋',
projectNo: '111 ',
total: 80,
children: [
{
siteName: '洛城清理场',
siteNo: '111 ',
total: 30,
a: 10,
b: 20,
},
{
siteName: '黑石子填埋场',
siteNo: '112 ',
total: 50,
a: 20,
b: 30,
}
]
},
{
projectName: '其他区域应急填埋',
projectNo: '112 ',
siteName: '花溪填埋场',
siteNo: '113',
total: 100,
a: 40,
b: 60,
}
]
},
{
companyName: '固废运输公司',
comanyNo: '222 ',
total: 530,
children: [
{
projectName: '市级转运',
projectNo: '222 ',
total: 270,
children: [
{
projectName: '市级转运',
projectNo: '222 ',
siteName: '界石站',
siteNo: '222 ',
total: 100,
a: 80,
b: 20,
},
{
projectName: '市级转运',
projectNo: '222 ',
siteName: '走马站',
siteNo: '223 ',
total: 60,
a: 30,
b: 30,
},
{
projectName: '市级转运',
projectNo: '222 ',
siteName: '夏家坝站',
siteNo: '224 ',
total: 30,
a: 20,
b: 10,
},
{
projectName: '市级转运',
projectNo: '222 ',
siteName: '西永站',
siteNo: '225 ',
total: 80,
a: 10,
b: 70,
}
]
},
{
projectName: '高校餐厨转运',
projectNo: '223 ',
siteName: '西永站',
siteNo: '226 ',
total: 80,
a: 70,
b: 10,
},
{
projectName: '渝北区餐厨转运',
projectNo: '224 ',
siteName: '冉家坝站',
siteNo: '227 ',
total: 180,
a: 40,
b: 140,
}
]
}
]
// js封装函数实现输入数据data,期望输出结果result内容:function transformData(data) {
// Create an empty object to store the transformed data
let transformedData = {};
// Iterate through the data array
for (let i = 0; i < data.length; i++) {
// Get the current object in the array
let currentObject = data[i];
// Get the company name and company number
let companyName = currentObject.companyName;
let companyNo = currentObject.comanyNo;
// If the company name does not exist in the transformed data object, create a new object for it
if (!transformedData[companyName]) {
transformedData[companyName] = {
companyName: companyName,
comanyNo: companyNo,
total: 0,
children: []
};
}
// Update the total value for the company
transformedData[companyName].total += currentObject.total;
// Get the project name and project number
let projectName = currentObject.projectName;
let projectNo = currentObject.projectNo;
// If the project name does not exist in the transformed data object, create a new object for it
let companyChildren = transformedData[companyName].children;
let projectIndex = companyChildren.findIndex(child => child.projectName === projectName && child.projectNo === projectNo);
if (projectIndex === -1) {
companyChildren.push({
projectName: projectName,
projectNo: projectNo,
total: 0,
children: []
});
projectIndex = companyChildren.length - 1;
}
// Update the total value for the project
companyChildren[projectIndex].total += currentObject.total;
// Get the site name and site number
let siteName = currentObject.siteName;
let siteNo = currentObject.siteNo;
// If the site name does not exist in the transformed data object, create a new object for it
let projectChildren = companyChildren[projectIndex].children;
let siteIndex = projectChildren.findIndex(child => child.siteName === siteName && child.siteNo === siteNo);
if (siteIndex === -1) {
projectChildren.push({
siteName: siteName,
siteNo: siteNo,
total: 0,
a: 0,
b: 0
});
siteIndex = projectChildren.length - 1;
}
// Update the total, a, and b values for the site
projectChildren[siteIndex].total += currentObject.total;
projectChildren[siteIndex].a += currentObject.a;
projectChildren[siteIndex].b += currentObject.b;
}
// Convert the transformed data object into an array
let transformedArray = Object.values(transformedData);
return transformedArray;
}
const result = transformData(data);
console.log(result);
原文地址: https://www.cveoy.top/t/topic/pesG 著作权归作者所有。请勿转载和采集!