比较两个对象JS

问题描述

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


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

我想从每个课程的“统计”数组中计算小时总数。问题是用户添加了课程,所以我不能说===“ Design”,但是我必须根据添加的课程来比较它们。所以我的问题是:如何从“统计”数组中计算每个课程的总课时?有没有一种方法可以简单地比较已经添加的课程?像所有彼此相等的课程一样,获取时间吗?

解决方法

我不确定在阅读问题时是否完全理解您的问题,但是听起来您可以使用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'))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...