[英]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" ,因为尚未创建对象,并且内存中也不存在点。
另一件事,数组键不能被命名,所以按键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
后,使用循环进行一些计算方法如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.