我一直使用for来计算表中的任何总和,但是我听说有一种适当的方法,那就是使用reduce,我遵循了文档和一些使用简单数组的示例,但是我使用的是数组对象,这是我的简单代码,因为我知道我缺少一些简单的东西:
let dataRevenus = [
{ id: 1, label: intl.get("REVENUES_FONCIERS"), value: 230000000 },
{ id: 2, label: intl.get("REVENUES_VALUERS_MOBILIERES"), value: 25000000 },
{ id: 3, label: intl.get("PENSIONS_RETRAITES"), value: 33008.0 }
];
let test = 0;
let sum = dataRevenus
? dataRevenus.reduce((acc, item) => {
console.log("here : " + parseFloat(item.value));
test = test + parseFloat(item.value);
return test;
})
: 0;
console.log(sum);
我在控制台中看到的是没有考虑到第一项,这就是我得到的结果:
here : 25000000
here : 33008
25033008
似乎我正确地计算了总和,但是没有计算出第一项的值
任何帮助将不胜感激
答案 0 :(得分:2)
您错误地使用了reduce,请尝试使用jsfiddle
let dataRevenus = [
{ id: 1, label: intl.get("REVENUES_FONCIERS"), value: 230000000 },
{ id: 2, label: intl.get("REVENUES_VALUERS_MOBILIERES"), value: 25000000 },
{ id: 3, label: intl.get("PENSIONS_RETRAITES"), value: 33008.0 }
];
let sum = dataRevenus
? dataRevenus.reduce((acc, item) => {
console.log("here : " + parseFloat(item.value));
return acc + item.value;
}, 0)
: 0;
console.log(sum);
我认为主要缺少的是累加器的初始化程序。但是,正如@VLAZ所说,您确实不应该按自己的方式使用外部变量测试。
https://jsfiddle.net/5uspgwL8/
已更新,仅将初始化程序添加到原始代码(和intl变量)中:https://jsfiddle.net/weomztad/
有关更多详细信息,请参见提供的link @Ivar。
答案 1 :(得分:2)
reduce方法是一个聚合函数,可使用两个参数:
array.reduce(function(x, y), [initialValue])
第一个是您提供的用于在数组中聚合数据的自定义函数(本身具有参数),第二个是可选的初始值。如果您不为函数提供初始值(您的情况),则首次调用该函数时,函数的参数将为第一和<数组的strong> second 元素。这意味着,您提供的表达式是item
聚合函数中的第二个参数
test = test + parseFloat(item.value);
将开始检查数组的 second 元素。此外,作为聚合函数,您不需要外部变量即可保存总值,因为它将自动从迭代传递到下一个。