【问题标题】:Trying to sum an array inside object with for loop试图用 for 循环对对象内的数组求和
【发布时间】:2020-02-11 13:25:54
【问题描述】:

我有一个问题,我找不到该问题的答案,我想在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
  }
]

【问题讨论】:

    标签: javascript arrays object for-loop


    【解决方案1】:

    您不能直接在对象内添加for 循环作为值,也不能在对象创建之前引用对象键或值,因此即使您可以添加for,那部分:
    i &lt; 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,见下面的sn-p:

    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)

    【讨论】:

    • 好的,我明白了。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2017-10-11
    • 2022-11-19
    • 2021-08-26
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多