为了账号安全,请及时绑定邮箱和手机立即绑定

比较两个对象数组 JS

比较两个对象数组 JS

宝慕林4294392 2023-07-29 15:08:29
我有两个由定制对象组成的数组。它们看起来像下面这样: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},],我想从每门课程的“统计”数组中计算小时数总和。问题是用户添加了课程,所以我不能说===“设计”,但我必须根据添加的课程来比较它们。所以我的问题是:如何计算“统计”数组中每门课程的总学时数?有没有办法简单地比较已经添加的课程?就像所有课程都彼此相等一样,了解小时数吗?
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

我不确定在阅读问题时我是否完全理解您的问题,但这听起来像是您可以通过减少函数来解决的问题。在此示例中,我们将遍历统计数据中的每个条目并合并小时数。


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]

}))


查看完整回答
反对 回复 2023-07-29
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

你可以简单地尝试这样


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


查看完整回答
反对 回复 2023-07-29
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信