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

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