我有一个数组数组,对象看起来像这样:
var data = [
[{'name':'John', 'value':2},
{'name':'Randy', 'value':4}
],
[{'name':'Sarah', 'value':10},
{'name':'Julie', 'value':10}
]
];
我想遍历每个数组并加
value
并将总计存储在数组中。我想到的是这样的:function add(accumulator, a) {
return accumulator + a;
}
var totals = [];
var yExtent = data.forEach(function(item) {
item.forEach(function(jtem) {
var subTotals = [];
subTotals.push(jtem.value);
return subTotals;
})
var localTotal = subTotals.reduce(add,0);
totals.push(localTotal);
return totals;
});
console.log(totals)
但是,这会导致错误:“未定义subTotals”
题
发生这种情况是因为
subTotals
与函数的其他部分不在同一范围内吗?如果是这样,我应该如何进行?我不能将var localTotal = subTotals.reduce(add,0);
放在范围内,因为forEach()
会过于频繁地计算它并给我错误的值。我应该如何修改此代码以将内部的forEach()
计算返回到外部? 最佳答案
forEach
用于副作用。您确实想使用转换功能而不是副作用来编写转换。首先,它将更短。其次,它会更清楚-您不希望有副作用,您想要一个纯粹的转换,您的代码将反映出这一点。使用相同的代码,但使用map
会导致以下结果:
var totals = data.map(item => {
var localTotal = item.map(datum => datum.value).reduce(add, 0);
return localTotal;
});