【问题标题】:Can not calculate sum of values in array via Reduce method?无法通过 Reduce 方法计算数组中值的总和?
【发布时间】:2019-03-01 12:40:09
【问题描述】:

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

似乎我正确计算了总和,但未计算第一项的值

任何帮助将不胜感激

【问题讨论】:

  • parseFloat(item.value)已经是数字了,不用解析了。
  • @VLAZ 你说得对,我不需要,但这不是问题。
  • 我知道不是这样,但我仍然看到很多人都错了。真正的问题是链接问题 - 因为您没有提供初始值,reduce 会将第一个元素作为 acc 并因此它“跳过”它,因为您无法将其处理为 item .另一个问题是您使用的不是acc,而是一个外部变量。 有效,但这不是reduce 应该如何运行的。

标签: javascript arrays reduce


【解决方案1】:

你错误地使用了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。

【讨论】:

    【解决方案2】:

    reduce 方法是一个使用两个参数的聚合函数:

    array.reduce(function(x, y), [initialValue])
    

    第一个是您为聚合数组中的数据提供的自定义函数(它本身有参数),可选的第二个是初始值。当您为函数提供初始值(您的情况)时,第一次调用该函数时,您的函数的参数将是 first 和 第二个元素。这意味着,作为聚合函数中的第二个参数 item,您提供的表达式

    test = test + parseFloat(item.value);
    

    将开始检查数组的 second 元素。此外,作为聚合函数,您不需要外部变量来保存总值,因为它会自动从迭代传递到下一次。

    【讨论】:

      猜你喜欢
      • 2019-10-28
      • 2021-12-07
      • 2017-09-27
      • 2020-09-27
      • 2018-01-27
      • 2022-01-18
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多