Как получить сумму нескольких массивов в массиве объектов? - PullRequest
0 голосов
/ 29 октября 2018

Мне было интересно, как вы получаете сумму нескольких массивов в массиве объектов. Мой код выглядит следующим образом:

const employeeList = [    

    {
    "name": "Ahmed",
    "scores": [
    "5",
    "1",
    "4",
    "4",
    "5",
    "1",
    "2",
    "5",
    "4",
    "1"
    ]
    },
    {
    "name": "Jacob Deming",
    "scores": [
    "4",
    "2",
    "5",
    "1",
    "3",
    "2",
    "2",
    "1",
    "3",
    "2"
    ]
    }];

var sum = 0;

for(let i = 0; i < employeeList.length; i++){
  var eachScore = employeeList[i].scores;
  const b = eachScore.map(Number);
  console.log(b);

  sum += parseInt(b);//this is the code that doesn't work

}

console.log(sum);

Итак, проблема в том, что я могу получить два массива в консольный журнал, но я не уверен, как выполнить суммирование каждого массива. Когда я делаю sum + = parseInt (b), он просто регистрирует, сколько элементов находятся в массиве (9). и когда я делаю без parseInt, он объединяет числа вместе, но не суммирует их ... Я хотел бы использовать метод .split () для разделения массивов и суммирования их по отдельности, но я не совсем понял, как сделать это еще.

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Вы можете использовать массив уменьшить для расчета суммы:

const employeeList = [    
{
  "name": "Ahmed",
  "scores": [
  "5",
  "1",
  "4",
  "4",
  "5",
  "1",
  "2",
  "5",
  "4",
  "1"
  ]
},
{
  "name": "Jacob Deming",
  "scores": [
  "4",
  "2",
  "5",
  "1",
  "3",
  "2",
  "2",
  "1",
  "3",
  "2"
  ]
}];

var sum = 0;

for(let i = 0; i < employeeList.length; i++){
  let eachScore = employeeList[i].scores;
  let b = eachScore.reduce((total,current)=>{
    total += +current;
    return total;
  },0);
  console.log(b);

  sum += b;
}

console.log(sum);
0 голосов
/ 29 октября 2018

Может быть, это поможет:

var parsedScores = [];
var scores = [
   "4","2","5","1","3","2","2","1","3","2"
];
let total = 0;
scores.forEach(el => {
   parsedScores.push(parseInt(el))
})
for (let score in parsedScores) {
   total += parsedScores[score]
}
console.log(total);
0 голосов
/ 29 октября 2018

Поскольку b - это массив чисел, вы не можете использовать с ним +, если не хотите использовать строку с запятой. Самый функциональный способ суммировать массив - это использовать reduce, который можно использовать для перебора его элементов и добавления их всех в накопитель:

b.reduce((a, b) => a + b);

Если вы хотите узнать частичные суммы, я бы использовал .map для преобразования каждого объекта в массиве employeeList в сумму их оценок, извлекая свойство scores и используя reduce для суммирования их все вверх:

const employeeList=[{"name":"Ahmed","scores":["5","1","4","4","5","1","2","5","4","1"]},{"name":"Jacob Deming","scores":["4","2","5","1","3","2","2","1","3","2"]}]

const sum = (a, b) => Number(a) + Number(b);
const output = employeeList.map(({ scores }) => scores.reduce(sum));
console.log(output);
// If you want to sum up the results into a single number as well:
console.log(output.reduce(sum));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...