javascript - 减少返回字符串而不是数字
问题描述
目标是获得同一月份的字段总和,获得最终结果,我设法执行的代码返回一个字符串,我不知道为什么。我怎么做这个工作?我已经尝试输入数字(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
这里的工作示例
解决方案
我们可以使用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']));
推荐阅读
- rest - Dart 将 SSL 证书和密钥添加到 HttpClient
- go - Golang 不增加 0.1
- django - Django Form 不会向 ManyToManyField 添加新对象,而是在其他对象之间切换
- kotlin - 如何在 Kotlin 的 Ktor 中提取访问权限验证
- javascript - 可以使用谷歌地图 api 快速流畅地滚动吗?
- vue.js - jwt过期时如何警告?
- java - 是否可以通过确定要读取的数量来读取循环中的位?
- r - 将具有不相等行的嵌套列表转换为数据框
- javascript - 您可以在 JavaScript 中使用 Microsoft Graph API 来获取列表项吗?
- excel - Excel VBA - Shapes.AddPicture 与 Pictures.Insert 从映射驱动器插入电子表格