[{
"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"
}
}
}
}]
所以,在我之前的问题之后,有一个答案,在 在一个数组中对数值进行分组和计数
所以它回答了我的问题,但是我又遇到了另一个问题,我没有意识到我确实有。如果我想这样显示我的数组呢?
[{
"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;
}, {}));
通常我会创建以下的hashmap company id
到数据点,但由于你特别要求一个数组,我们也可以使用 .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++
}
})