减少返回字符串而不是数字

时间:2021-06-28 09:48:46

标签: javascript reactjs

目的是求同月字段的总和,得到最终结果,结果我做的代码返回一个字符串,不知道为什么。我如何使这项工作? 我已经尝试过输入数字 (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

工作示例here

1 个答案:

答案 0 :(得分:1)

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

我们首先创建一个数据映射,以月份为键,例如{'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']));

相关问题