[英]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.