Let's say we have an array of object like this
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'
},
]
I would like to count all students that are male that have the same grade and female students with the same grade something like this would be the output...
85: {
Male: 2,
Female: 1,
}
90: {
Female:1
}
I only have this code so far
const foo = {};
studentRecord.reduce((prevVal, currentVal) => {
foo[currentVal['gender']] = (foo[currentVal['gender']] || 0) + 1;
});
Which only outputs {Male: 2, Female: 2}
When reducing into an object, create an object at the grade property first, if it doesn't exist. Then create an object at that grade's Male
or Female
property if it doesn't exist, and increment it:
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);
Or, without reduce :
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);
try this
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>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.