繁体   English   中英

Javascript根据两个值计算相同的对象值数组

[英]Javascript count same array of object values based on two values

假设我们有一个像这样的对象数组

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}

当归约成一个对象时,如果它不存在,首先在等级属性上创建一个对象。 然后在该等级的MaleFemale属性上创建一个对象(如果它不存在),并增加它:

 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);

尝试这个

 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM