比较两个对象数组 JS

Compare two arrays of objects JS

我有两个由定制对象组成的数组。它们如下所示:


courses: [
{Course: "Design", ECST: 5}, 
{Course: "Construction", ECTS: 10}
],

statistics: [
{Course: "Design", Hours: 2}, 
{Course: "Design", Hours: 2}, 
{Course: "Construction", Hours: 2},
{Course: "Construction", Hours: 2},
],


我想根据每门课程的“统计”数组计算小时总和。问题是用户添加了课程,所以我不能说===“设计”,但我必须根据添加的课程来比较它们。所以我的问题是:如何计算“统计”数组中每门课程的总学时数?有没有办法简单地比较已经添加的课程?好像所有的课程都是一样的,搞定时间?

我不确定我在阅读问题时是否完全理解您的问题,但听起来您可能可以使用 reduce 函数解决问题。在此示例中,我们将遍历统计信息中的每个条目并合并小时数。

const hoursPerCourse = statistics.reduce((acc, curr) => {
    acc[curr.Course] = acc[curr.Course] ? acc[curr.Course] + curr.Hours : curr.Hours

    return acc
}, {})

您还可以通过执行以下操作从该结果中获取课程数组中每门课程的学时:

courses.map((course) => ({
    ...course,
    hours: hoursPerCourse[course.Course]
}))

你可以这样试试

Array.prototype.sum = function(matchKey, matchValue, sumKey) {
  var total = 0
  for (var i = 0; i < this.length; i++) {
    if (this[i][matchKey].toLowerCase() === matchValue.toLowerCase())
      total += this[i][sumKey]
  }
  return total
}

console.log(statistic.sum('Course', 'design', 'Hours'))