无法通过Reduce方法计算数组中的值总和?

时间:2019-03-01 12:40:10

标签: javascript arrays reduce

我一直使用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

似乎我正确地计算了总和,但是没有计算出第一项的值

任何帮助将不胜感激

2 个答案:

答案 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 元素。此外,作为聚合函数,您不需要外部变量即可保存总值,因为它将自动从迭代传递到下一个。