繁体   English   中英

尝试使用 for 循环对对象内的数组求和

[英]Trying to sum an array inside object with for loop

我有一个问题,我找不到该问题的答案,我想从points_sum points添加/求和所有值。

我试图通过在对象中添加一个for循环来做到这一点,但后来我得到:

'意外的标记'

我怎样才能以另一种方式做到这一点?

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
  }
]

您不能直接在对象内部添加for循环作为值,也不能在创建之前引用对象键或值,因此即使您可以添加for ,该部分:
i < points.length会抛出一个错误,比如"points is undefined" ,因为尚未创建对象,并且内存中也不存在点。

另一件事,数组键不能被命名,所以按键team1team2从阵列中移除,只有它们的价值将保持(对象),如果你想保持这些名称,使可变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后,使用循环进行一些计算方法如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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM