繁体   English   中英

使用嵌套的 object 对数组内的值进行分组和计数

[英]Group and count values inside array with nested object

[{
    "id":35,
    "aktivis":{
        "id":450,
        "name":"A. Sri Nugroho Hadi",
        "gender": "male",
        "active_job":{
            "id":491,
            "id_aktivis":450,
            "id_company":20,
            "company":{
                "id":20,
                "name":"Company 1"
            }
        }
    }
},
{
    "id":36,
    "aktivis":{
        "id":451,
        "name":"Sri ",
        "gender": "female",
        "active_job":{
            "id":492,
            "id_aktivis":451,
            "id_company":21,
            "company":{
                "id":21,
                "name":"compnay 2"
            }
        }
    }
}]

所以在我上一个问题之后,在Group 中有 anwser 并在数组中计算值

所以它回答了我的问题,但后来我遇到了另一个我没有意识到我确实有的问题。 如果我想这样显示我的数组怎么办?

[{
        "id":20,
        "name":"Company 1"
        "employee_count":1
        "female":0
        "male":1
    },
    {
        "id":22,
        "name":"Company 2"
        "employee_count":1
        "female":1
        "male":0
}]
Object.values([YOUR ARRAY].reduce(function (accumulator, current) {
     const company = current.aktivis.active_job.company;
     accumulator[company.id] = accumulator[company.id] || {
       "id": company.id,
        "name": company.name,
        "employee_count": 0,
        "female": 0,
        "male": 0,
     };

     accumulator[company.id].employee_count += 1;
     if (current.aktivis.gender === 'male') {
       accumulator[company.id].male += 1;
     } else {
       accumulator[company.id].female += 1;
     }

     return accumulator;
   }, {}));

通常我会创建company id的 hashmap 到数据点,但是由于您专门要求一个数组,我们也可以使用.findIndex方法来查看公司是否存在。

const data = [{
    "id":35,
    "aktivis":{
        "id":450,
        "name":"A. Sri Nugroho Hadi",
        "gender": "male",
        "active_job":{
            "id":491,
            "id_aktivis":450,
            "id_company":20,
            "company":{
                "id":20,
                "name":"Company 1"
                }
            }
        }
    },
    {
    "id":36,
    "aktivis":{
        "id":451,
        "name":"Sri ",
        "gender": "female",
        "active_job":{
            "id":492,
            "id_aktivis":451,
            "id_company":21,
            "company":{
                "id":21,
                "name":"compnay 2"
                }
            }
        }
    }
]

let companies = [];

data.forEach(employee => {
    const sex = employee.aktivis.gender;
    const jobData = employee.aktivis.active_job;
    const companyIndex = companies.findIndex(c => c.id === jobData.company.id);
    const companyData = companies[companyIndex]
    if (!companyData) {
        // first time encountering this company need to create a new object
        companies.push({
            id: jobData.company.id,
            name: jobData.company.name,
            employee_count: 1,
            female: sex === "female" ? 1 : 0,
            male: sex === "male" ? 1 : 0,
        })
    } else {
        // company already exists in our array, just need to increment values
        companies[companyIndex][sex]++
        companies[companyIndex].employee_count++
    }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM