#javascript #arrays #comparison #equals
#javascript #массивы #сравнение #равно
Вопрос:
У меня есть два массива, которые состоят из пользовательских объектов. Они выглядят следующим образом:
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},
],
Я хочу вычислить сумму часов из массива «статистика» каждого курса. Проблема в том, что пользователь добавляет курсы, поэтому я не могу сказать === «Дизайн», но я должен сравнить их на основе добавленных курсов. Итак, мои вопросы таковы: Как я могу вычислить общее количество часов из каждого курса в массиве «статистика»? Есть ли способ просто сравнить уже добавленные курсы? Что-то вроде всех курсов, которые равны друг другу, получают часы?
Ответ №1:
Я не уверен, что полностью понял вашу проблему при чтении вопроса, но это звучит как то, что вы, вероятно, можете решить с помощью функции уменьшения. В этом примере мы пройдемся по каждой записи в статистике и объединим часы.
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]
}))
Ответ №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'))