假设我们有一个像这样的对象数组
const studentRecord = [
{
name: 'John Doe',
gender: 'Male',
grade: '85'
},{
name: 'Steve Doe',
gender: 'Male',
grade: '85'
},{
name: 'Jane Doe',
gender: 'Male',
grade: '90'
},{
name: 'Mary Jane',
gender: 'Female',
grade: '85'
},
]我想把所有同年级的男生和同年级的女生一起数数,就像这样的结果……
85: {
Male: 2,
Female: 1,
}
90: {
Female:1
}到目前为止,我只有这个代码
const foo = {};
studentRecord.reduce((prevVal, currentVal) => {
foo[currentVal['gender']] = (foo[currentVal['gender']] || 0) + 1;
});,它只输出{Male: 2, Female: 2}
发布于 2020-02-19 02:46:29
当还原为对象时,如果不存在,则首先在品位属性处创建一个对象。如果该级别的Male或Female属性不存在,则创建该级别的对象,并增加该对象:
const studentRecord = [
{
name: 'John Doe',
gender: 'Male',
grade: '85'
},{
name: 'Steve Doe',
gender: 'Male',
grade: '85'
},{
name: 'Jane Doe',
gender: 'Male',
grade: '90'
},{
name: 'Mary Jane',
gender: 'Female',
grade: '85'
},
];
const results = studentRecord.reduce((a, { gender, grade }) => {
if (!a[grade]) {
a[grade] = {};
}
a[grade][gender] = (a[grade][gender] || 0) + 1;
return a;
}, {});
console.log(results);
或者,不减
const studentRecord = [
{
name: 'John Doe',
gender: 'Male',
grade: '85'
},{
name: 'Steve Doe',
gender: 'Male',
grade: '85'
},{
name: 'Jane Doe',
gender: 'Male',
grade: '90'
},{
name: 'Mary Jane',
gender: 'Female',
grade: '85'
},
];
const results = {};
for (const { gender, grade } of studentRecord) {
if (!results[grade]) {
results[grade] = {};
}
results[grade][gender] = (results[grade][gender] || 0) + 1;
}
console.log(results);
https://stackoverflow.com/questions/60292209
复制相似问题