首页 > 解决方案 > 减少返回字符串而不是数字

问题描述

目标是获得同一月份的字段总和,获得最终结果,我设法执行的代码返回一个字符串,我不知道为什么。我怎么做这个工作?我已经尝试输入数字(acc.Fuel)但结果始终相同,我试图让该结果能够制作图表,所以最终结果确实必须是这样的数字,我感谢所有可能错过一点时间来提供帮助的人,并且我提前道歉,因为我是这个开发阶段的大三学生。

对象最终应该是这样的:

  {
    name: 'Fuel',
    data: [30, 40, 45, 50, 49, 60, 70]
  },

是)我有的:

json数据:

[
    {
        "Data": "01/01/2009 00:00:00",
        "Ilha": "1",
        "Fuel": "43575070.000",
        "Diesel": "5963754.000",
        "TermFuel": "NULL",
        "Hidrica": "2084379.000",
        "Geotermica": "14775549.410",
        "Eolica": "3771650.000",
        "Biogas": "2502.000",
        "Aux": "1634838.600"
    },
    {
        "Data": "01/02/2009 00:00:00",
        "Ilha": "1",
        "Fuel": "NULL",
        "Diesel": "1509490.000",
        "TermFuel": "NULL",
        "Hidrica": "NULL",
        "Geotermica": "NULL",
        "Eolica": "296600.000",
        "Biogas": "NULL",
        "Aux": "56909.000"
    },
    {
        "Data": "01/03/2009 00:00:00",
        "Ilha": "1",
        "Fuel": "21061010.000",
        "Diesel": "6887.000",
        "TermFuel": "NULL",
        "Hidrica": "1534690.000",
        "Geotermica": "14775549.410",
        "Eolica": "NULL",
        "Biogas": "2502.000",
        "Aux": "478623.000"
    }
]

const newIlha = DataOptions.map((ilha) => ({
    ...ilha,
    teste: Number(ilha.Fuel),
    mes: ilha.Data.split('/')[0],
    dia: ilha.Data.split('/')[1],
    ano: ilha.Data.split('/')[2].split(' ')[0]
  }))
const series = newIlha.reduce(
    (acc, cur) => [
      {
        name: 'Fuel',
        data: MesesOptions.map((month) => [
          acc.find((x) => x.name === 'Fuel').data[0] +
            (cur.mes === month.value
              ? month.value === 'NULL'
                ? 0
                : cur.teste
              : 0)
        ])
      }
    ],
    [
      { name: 'Fuel', data: [0] },
      { name: 'Diesel', data: [0] },
      { name: 'TermFuel', data: [0] },
      { name: 'Hidrica', data: [0] },
      { name: 'Geotermica', data: [0] },
      { name: 'Eolica', data: [0] },
      { name: 'Biogas', data: [0] },
      { name: 'Aux', data: [0] }
    ]
  )

我得到的结果:

0:
data: Array(12)
0: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
1: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
2: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
3: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
4: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
5: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
6: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
7: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
8: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
9: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
10: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000000"]
11: ["59637541509490688784733010255902135470363680028222…0000000000000000000000000000000000000000000000NaN"]
length: 12
__proto__: Array(0)
name: "Fuel"
__proto__: Object

这里的工作示例

标签: javascriptreactjs

解决方案


我们可以使用Array.reduce oninput来创建所需的结果。

我们首先创建一个数据映射,以月份为键,例如 { '01': {}, '02': {} }。然后,我们可以再次使用 parseFloat 和 .reduce 将有效总数相加。

我从下个月添加了一个数据点,以按月显示总数。

并按月创建结果图:

let input = [
    {
        "Data": "01/01/2009 00:00:00",
        "Ilha": "1",
        "Fuel": "43575070.000",
        "Diesel": "5963754.000",
        "TermFuel": "NULL",
        "Hidrica": "2084379.000",
        "Geotermica": "14775549.410",
        "Eolica": "3771650.000",
        "Biogas": "2502.000",
        "Aux": "1634838.600"
    },
    {
        "Data": "01/02/2009 00:00:00",
        "Ilha": "1",
        "Fuel": "NULL",
        "Diesel": "1509490.000",
        "TermFuel": "NULL",
        "Hidrica": "NULL",
        "Geotermica": "NULL",
        "Eolica": "296600.000",
        "Biogas": "NULL",
        "Aux": "56909.000"
    },
    {
        "Data": "01/03/2009 00:00:00",
        "Ilha": "1",
        "Fuel": "21061010.000",
        "Diesel": "6887.000",
        "TermFuel": "NULL",
        "Hidrica": "1534690.000",
        "Geotermica": "14775549.410",
        "Eolica": "NULL",
        "Biogas": "2502.000",
        "Aux": "478623.000"
    },
    
    {
        "Data": "02/01/2009 00:00:00",
        "Ilha": "1",
        "Fuel": "21061010.000",
        "Diesel": "6887.000",
        "TermFuel": "NULL",
        "Hidrica": "1534690.000",
        "Geotermica": "14775549.410",
        "Eolica": "NULL",
        "Biogas": "2502.000",
        "Aux": "478623.000"
    }
];

    
function getResultsByMonth(input, properties) {
    let result = input.reduce((acc, cur) => {
        const key = cur.Data.split('/')[0];
        if (!acc[key]) acc[key] = { };
        for(let property of properties) {
            if (!acc[key][property]) acc[key][property] = { name: property, data: [] };
            const val = parseFloat(cur[property]);
            // Filter out falsey values other than 0.
            if (val || val === 0) acc[key][property].data.push(val);
        }
        return acc;
    }, {});
    return Object.fromEntries(Object.entries(result).map(([k,v]) => [k, Object.values(v)]));
}
    

console.log("getResultsByMonth:", getResultsByMonth(input, ['Fuel', 'Diesel']));


推荐阅读