Суммирование значений из объектов, хранящихся в массиве - PullRequest
1 голос
/ 10 марта 2020

Я новичок в JavaScript, и я уже столько всего перепробовал. Я должен суммировать все значения (оценки) для каждого человека внутри функции. Поэтому, когда я вызываю функцию снаружи с помощью

console.log(totalNumberOfGrades(// I have to put here any of the three person objects... ));

, внутренняя часть функции может суммировать значения. Я попробовал это с .reduce и for ... в циклах, но я не могу понять, как получить доступ к значениям свойства объектов, когда я использую массив allPerson. Спасибо за вашу помощь, и я продолжаю учиться.

var person1 = {
    gradeMath: 2,
    gradeBio: 3,
    gradeEnglish: 1
};

var person2 = {
    gradeMath: 1,
    gradeBio: 2,
    gradeEnglish: 2
};

var person3 = {
    gradeMath: 3,
    gradeBio: 4,
    gradeEnglish: 3
};

var allPerson = [person1, person2, person3];

function totalNumberOfGrades(person) {
    // return the sum of grades for each person

}

Результат выглядит так:

console.log(totalNumberOfGrades(person1); = 6

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Вы можете использовать Object.values ​​ и Array.reduce прототип .

function totalNumberOfGrades(person) { // return the sum of grades for each person
  return Object.values(person) // return array: [2, 3, 1] with person1
               .reduce((total, grade) => total + grade, 0)
}
0 голосов
/ 10 марта 2020

Использование forEach на Object.values

var person1 = {
    gradeMath: 2,
    gradeBio: 3,
    gradeEnglish: 1
};

function totalNumberOfGrades(person) {
  let sum = 0;
  Object.values(person).forEach(val => (sum += val));
  return sum;
}

console.log(totalNumberOfGrades(person1));
0 голосов
/ 10 марта 2020

Я предполагаю, что вы хотите суммировать каждую оценку в каждом объекте

var person1 = {
  gradeMath: 2,
  gradeBio: 3,
  gradeEnglish: 1
};

var person2 = {
  gradeMath: 1,
  gradeBio: 2,
  gradeEnglish: 2
};

var person3 = {
  gradeMath: 3,
  gradeBio: 4,
  gradeEnglish: 3
};

var allPerson = [person1, person2, person3];

const result = allPerson.reduce((acc, x) => {
  const sumAllGrades = Object.values(x).reduce((acc, y) => acc + y, 0);
  return acc + sumAllGrades;
}, 0)
console.log(result)
...