假设我们有一个像这样的对象数组
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);
发布于 2020-02-19 02:45:40
您的代码对性别键有正确的认识,但是缺少级别键,这是生成所需的嵌套对象所必需的。
下面的方法检查一个等级键是否还存在,如果它不存在,则添加它。然后,它为该键增加适当的性别。
const studentRecords = [{ 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 byGrade = studentRecords.reduce((a, e) => {
if (!(e.grade in a)) {
a[e.grade] = {};
}
a[e.grade][e.gender] = ++a[e.grade][e.gender] || 1;
return a;
}, {});
console.log(byGrade);
发布于 2020-02-19 02:51:27
尝尝这个
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 grades = {};
studentRecord.map(e => { if(!grades[e.grade]) grades[e.grade] = {Male:0,Female:0}; });
studentRecord.map(e => grades[e.grade][e.gender]++ );
document.getElementById("result").innerHTML = JSON.stringify(grades)<div id="result"></div>
https://stackoverflow.com/questions/60292209
复制相似问题