javascript - 如何对数组进行分组并制作表格以在图表中显示?
问题描述
我正在尝试创建一个数组以显示在图表中,
这是我的数据:
[
{ Cantidad: 2, Mesint: 4, DepartmentName: 'CALIDAD' },
{ Cantidad: 1, Mesint: 5, DepartmentName: 'CALIDAD' },
{ Cantidad: 2, Mesint: 3, DepartmentName: 'GERENCIA' },
{ Cantidad: 1, Mesint: 4, DepartmentName: 'MATERIALES' },
{ Cantidad: 1, Mesint: 6, DepartmentName: 'MATERIALES' },
{ Cantidad: 9, Mesint: 1, DepartmentName: 'PRODUCCION' },
{ Cantidad: 23, Mesint: 2, DepartmentName: 'PRODUCCION' },
{ Cantidad: 6, Mesint: 3, DepartmentName: 'PRODUCCION' },
{ Cantidad: 22, Mesint: 4, DepartmentName: 'PRODUCCION' },
{ Cantidad: 16, Mesint: 5, DepartmentName: 'PRODUCCION' },
{ Cantidad: 4, Mesint: 6, DepartmentName: 'PRODUCCION' },
{ Cantidad: 3, Mesint: 3, DepartmentName: 'PRUEBA ELECTRICA' },
{ Cantidad: 2, Mesint: 4, DepartmentName: 'PRUEBA ELECTRICA' },
{ Cantidad: 1, Mesint: 5, DepartmentName: 'PRUEBA ELECTRICA' },
{ Cantidad: 1, Mesint: 6, DepartmentName: 'PRUEBA ELECTRICA' },
{ Cantidad: 1, Mesint: 6, DepartmentName: 'TI' },
];
并且需要这个组形式:输出
[
{ name: 'CALIDAD', data: [0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0] },
{ name: 'GERENCIA', data: [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0] },
{ name: 'MATERIALES', data: [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0] },
{ name: 'PRODUCCION', data: [9, 23, 6, 22, 16, 4, 0, 0, 0, 0, 0, 0] },
{ name: 'PRUEBA ELECTRICA', data: [0, 0, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0] },
{ name: 'TI', data: [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] },
];
进入前组形式的数组是一个带有 Mesint 的“Cantidad”过滤器的数组,这是对一年的 mounths 的引用。所以当“head”(例如:“Calidad”)没有值时,我需要输入 0。
我正在尝试使用 map() 进行分组,但我无法在月份推送带有 count (Value/"Cantidad") 的数组。
解决方案
首先,请注意您所描述的预期输出无效,对象应由key/value
对组成。但是,您可以生成一个对象,其中keys
是DepartmentName's
并且值是月份的Cantidad
数组12
:
{
"CALIDAD": [0,0,0,2,1,0,0,0,0,0,0,0],
"GERENCIA": [0,0,2,0,0,0,0,0,0,0,0,0],
"MATERIALES": [0,0,0,1,0,1,0,0,0,0,0,0],
"PRODUCCION": [9,23,6,22,16,4,0,0,0,0,0,0],
"PRUEBA ELECTRICA": [0,0,3,2,1,1,0,0,0,0,0,0],
"TI": [0,0,0,0,0,1,0,0,0,0,0,0]
}
该输出将类似于您期望的输出,并且可以使用Array.reduce()来实现,如下一个示例所示:
const input = [
{Cantidad: 2, Mesint: 4, DepartmentName: "CALIDAD"},
{Cantidad: 1, Mesint: 5, DepartmentName: "CALIDAD"},
{Cantidad: 2, Mesint: 3, DepartmentName: "GERENCIA"},
{Cantidad: 1, Mesint: 4, DepartmentName: "MATERIALES"},
{Cantidad: 1, Mesint: 6, DepartmentName: "MATERIALES"},
{Cantidad: 9, Mesint: 1, DepartmentName: "PRODUCCION"},
{Cantidad: 23, Mesint: 2, DepartmentName: "PRODUCCION"},
{Cantidad: 6, Mesint: 3, DepartmentName: "PRODUCCION"},
{Cantidad: 22, Mesint: 4, DepartmentName: "PRODUCCION"},
{Cantidad: 16, Mesint: 5, DepartmentName: "PRODUCCION"},
{Cantidad: 4, Mesint: 6, DepartmentName: "PRODUCCION"},
{Cantidad: 3, Mesint: 3, DepartmentName: "PRUEBA ELECTRICA"},
{Cantidad: 2, Mesint: 4, DepartmentName: "PRUEBA ELECTRICA"},
{Cantidad: 1, Mesint: 5, DepartmentName: "PRUEBA ELECTRICA"},
{Cantidad: 1, Mesint: 6, DepartmentName: "PRUEBA ELECTRICA"},
{Cantidad: 1, Mesint: 6, DepartmentName: "TI"}
];
let res = input.reduce((acc, {Cantidad, Mesint, DepartmentName}) =>
{
acc[DepartmentName] = acc[DepartmentName] || [0,0,0,0,0,0,0,0,0,0,0,0];
acc[DepartmentName][Mesint - 1] = Cantidad;
return acc;
}, {});
console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
如果生成的输出不符合您的目标,您可以使用该示例作为指导并根据您的需要进行调整。例如,如果你想要类似下一个:
[
{name: "CALIDAD", data: [0,0,0,2,1,0,0,0,0,0,0,0]},
{name: "GERENCIA", data: [0,0,2,0,0,0,0,0,0,0,0,0]},
{name: "MATERIALES", data: [0,0,0,1,0,1,0,0,0,0,0,0]},
{name: "PRODUCCION", data: [9,23,6,22,16,4,0,0,0,0,0,0]},
{name: "PRUEBA ELECTRICA", data: [0,0,3,2,1,1,0,0,0,0,0,0]},
{name: "TI", data: [0,0,0,0,0,1,0,0,0,0,0,0]}
]
然后,您可以在.reduce()
方法之后使用下一个代码
res = Object.entries(res).map(([name, data]) => ({name, data}));
推荐阅读
- scala - 在 spark 数据集上使用 groupByKey 中的最小/最大操作
- php - 我正在使用 Codeigniter 3。我想制作 Question and Ans quiz type form
- gradle - 将 `.klib` 库添加到 kotlin 多平台
- regex - Perl:匹配多行
- javascript - Vuetify 自动完成仅显示第一个结果
- javascript - athena.getQueryExecution 返回 RUNNING 状态 1 分钟+,即使历史表明该作业耗时 4 秒
- javascript - 如何正确使用 USParser() 在 ReactJS 中获取我的计算机 CPU?
- python - 为什么 np.var(x) 和 np.cov(x, y) 给我不同的值?
- python - 如何通过查找其 id 单击网站上的按钮
- firebase - 使用 Firebase Admin SDK 将转化事件添加到云消息