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