javascript 对数组中匹配相同键的所有项目求和

我有一个像这样的 JSON:


  [

   {

      "faculty":{

         "_id":"5f9c3e04e5a5423cec34b2e2",

         "code":"khmt",

         "facultyName":"Computer Science"

      },

      "classSize":91,

      "warnedLength":61

   },

   {

      "faculty":{

         "_id":"5f9c53c8a0db8f4240ec6f71",

         "code":"dtvt",

         "facultyName":"Electronics and Telecommunication"

      },

      "classSize":89,

      "warnedLength":44

   },

   {

      "faculty":{

         "_id":"5f9c53c8a0db8f4240ec6f71",

         "code":"dtvt",

         "facultyName":"Electronics and Telecommunication"

      },

      "classSize":59,

      "warnedLength":20

   },

   {

      "faculty":{

         "_id":"5f9c53c8a0db8f4240ec6f71",

         "code":"hkvt",

         "facultyName":"Space Airline"

      },

      "classSize":10,

      "warnedLength":5

   },

   {

      "faculty":{

         "_id":"5f9c53c8a0db8f4240ec6f71",

         "code":"hkvt",

         "facultyName":"Space Airline"

      },

      "classSize":20,

      "warnedLength":10

   },

   {

      "faculty":{

         "_id":"5f9c53c8a0db8f4240ec6f71",

         "code":"hkvt",

         "facultyName":"Space Airline"

      },

      "classSize":30,

      "warnedLength":15

   }

]

我想要这样的输出:


[

   {

      "faculty":{

         "_id":"5f9c3e04e5a5423cec34b2e2",

         "code":"khmt",

         "facultyName":"Computer Science"

      },

      "totalClassSize":91,

      "totalWarnedLength":61

   },

   {

      "faculty":{

         "_id":"5f9c53c8a0db8f4240ec6f71",

         "code":"dtvt",

         "facultyName":"Electronics and Telecommunication"

      },

      "totalClassSize":148, // total classSize of all class has facultyName is "Electronics and Telecommunication"

      "totalWarnedLength":64 // total warnedLength of all class has facultyName is "Electronics and Telecommunication"

   },


输出是一个数组,其总和classSize具有相同的属性属性totalClassSize,并且总和warnedLength具有相同的属性属性totalWarnedLength


输入是一个数组,输出也仍然是一个数组


我是学习代码的初学者,但我仍然被这个问题困扰了一段时间


非常感谢你帮助我,祝你有美好的一天


慕斯709654
浏览 103回答 1
1回答

狐的传说

使用Array.prototype.reduce,您可以通过将当前输入数组作为faculty._id对象键进行分组来生成新对象,并基于此,您可以计算相同对象键的totalWarnedLength和。totalClassSizeconst input = [{    "faculty": {      "_id": "5f9c3e04e5a5423cec34b2e2",      "code": "khmt",      "facultyName": "Computer Science"    },    "classSize": 91,    "warnedLength": 61  },  {    "faculty": {      "_id": "5f9c53c8a0db8f4240ec6f71",      "code": "dtvt",      "facultyName": "Electronics and Telecommunication"    },    "classSize": 89,    "warnedLength": 44  },  {    "faculty": {      "_id": "5f9c53c8a0db8f4240ec6f71",      "code": "dtvt",      "facultyName": "Electronics and Telecommunication"    },    "classSize": 59,    "warnedLength": 20  },  {    "faculty": {      "_id": "5f9c53c8a0db8f4240ec6f71",      "code": "hkvt",      "facultyName": "Space Airline"    },    "classSize": 10,    "warnedLength": 5  },  {    "faculty": {      "_id": "5f9c53c8a0db8f4240ec6f71",      "code": "hkvt",      "facultyName": "Space Airline"    },    "classSize": 20,    "warnedLength": 10  },  {    "faculty": {      "_id": "5f9c53c8a0db8f4240ec6f71",      "code": "hkvt",      "facultyName": "Space Airline"    },    "classSize": 30,    "warnedLength": 15  }];const groupBy = input.reduce((acc, cur) => {  if (acc[cur.faculty['_id']]) {    acc[cur.faculty['_id']].totalClassSize += cur.classSize;    acc[cur.faculty['_id']].totalWarnedLength += cur.warnedLength;  } else {    acc[cur.faculty['_id']] = {      faculty: cur.faculty,      totalClassSize: cur.classSize,      totalWarnedLength: cur.warnedLength    };  }  return acc;}, {});const output = Object.values(groupBy);console.log(output);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript