Попытка суммировать массив внутри объекта с помощью цикла for - PullRequest
0 голосов
/ 11 февраля 2020

У меня проблема, и я не могу найти ответ на этот вопрос, я хочу добавить / сложить все значения из points в points_sum.

Я попытался сделать это, добавив for l oop в объект, но затем я получил:

'Неожиданный токен'

Как я могу сделать это по-другому?

let sum = 0;
let teams = [
  team1 = {
    name: "Real",
    goal_plus: [3, 4, 2, 1],
    goal_minus: [1, 0, 2, 1],
    points: [3, 3, 3, 1],
    points_sum: for (let i = 0; i < points.length; i++) {
      sum += points[i];
    }
  },
  team2 = {
    name: "Barca",
    goal_plus: [5, 2, 5, 1],
    goal_minus: [1, 0, 0, 1],
    points: [3, 3, 3, 1],
    points_sum: 0
  }
]

1 Ответ

1 голос
/ 11 февраля 2020

Вы не можете добавить for l oop непосредственно внутри объекта в качестве значения, а также вы не можете ссылаться на ключи объекта или значения до того, как он был создан, поэтому даже если вы можете добавить for , эта часть:
i < points.length вызовет ошибку, что-то вроде "точки не определены" , поскольку объект еще не создан и точки также не существуют в памяти.

Другое дело, ключи массивов не могут быть названы, поэтому ключи team1 и team2 будут удалены из массива, останется только их значение (объекты), если вы хотите сохранить эти имена, сделайте переменную teams объект, а не массив.

Решение вашей проблемы может быть следующим: создать функцию, которая получает массив и составляет для вас сумму, которую я использую внутри этой функции, .reduce() метод.

let teams = [
  {
    name: "Real",
    goal_plus: [3, 4, 2, 1],
    goal_minus: [1, 0, 2, 1],
    points: [3, 3, 3, 1],
    points_sum: SumPoints([3, 3, 3, 1]),
  },
  {
    name: "Barca",
    goal_plus: [5, 2, 5, 1],
    goal_minus: [1, 0, 0, 1],
    points: [3, 3, 3, 1],
    points_sum: SumPoints([3, 3, 3, 1])
  }
]

function SumPoints(arr) {
  return arr.reduce((a, b) => a + b, 0)
}

console.log(teams)

Другой возможный способ решить эту проблему, если вы не можете или не хотите передавать весь массив в качестве параметра во внешнюю функцию, - пустить points_sum пустой а затем после создания массива teams выполните некоторую работу для вычисления, используя метод al oop, такой как forEach, см. фрагмент кода ниже:

let teams = [{
    name: "Real",
    goal_plus: [3, 4, 2, 1],
    goal_minus: [1, 0, 2, 1],
    points: [3, 3, 3, 1],
    points_sum: 0
  },
  {
    name: "Barca",
    goal_plus: [5, 2, 5, 1],
    goal_minus: [1, 0, 0, 1],
    points: [3, 3, 3, 1],
    points_sum: 0
  }
]

teams.forEach(x => {
  x.points_sum = x.points.reduce((a, b) => a + b, 0)
})

console.log(teams)
...