javascript - 在新数组中对对象的值进行分组 - JavaScript
问题描述
我需要返回一个数组,其中包含从对象数组中提取的多个元素。
这是原始对象:
data: Array(11)
0: {id: "1", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-01", PD_PETROLEO: 369.168, PD_GAS: 96, …}
1: {id: "2", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-02", PD_PETROLEO: 364.21, PD_GAS: 96, …}
2: {id: "3", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-03", PD_PETROLEO: 361.559, PD_GAS: 96, …}
3: {id: "4", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-04", PD_PETROLEO: 322.346, PD_GAS: 81, …}
4: {id: "5", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-05", PD_PETROLEO: 339.027, PD_GAS: 44, …}
5: {id: "6", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-06", PD_PETROLEO: 346.939, PD_GAS: 44, …}
6: {id: "7", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-08", PD_PETROLEO: 321.934, PD_GAS: 44, …}
7: {id: "8", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-09", PD_PETROLEO: 351.404, PD_GAS: 44, …}
8: {id: "9", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-10", PD_PETROLEO: 360.167, PD_GAS: 44, …}
9: {id: "10", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-10", PD_PETROLEO: 371.895, PD_GAS: 44, …}
10: {id: "11", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-11", PD_PETROLEO: 356.232, PD_GAS: 66, …}
我正在使用这样的地图功能:
const FECHA_DATA = [
datosDiarios &&
datosDiarios.data.map(fecha => {
const { FECHA, PD_GAS, PD_AGUA, PD_PETROLEO } = fecha;
return FECHA;
}),
];
我得到了这个结果:
[Array(11)]
0: (11) ["2010-06-01", "2010-06-02", "2010-06-03", "2010-06-04", "2010-06-05", "2010-06-06", "2010-06-08", "2010-06-09", "2010-06-1..."]
但是,对于 PD_GAS、PD_PETROLEO 和 PD_AGUA,我需要这样的数组:
[Array(11)]
0: (11) ["2010-06-01", "2010-06-02", "2010-06-03", "2010-06-04", "2010-06-05", "2010-06-06", "2010-06-08", "2010-06-09", "2010-06-1..."],
1: (11) [96, 96, 96, 81, 44, 44, 44, 44, 44, 44, 66],
2: (11) [1138.48, 1138.48, 1138.48, 1146.85, 1160.95, 1160.95, 1160.95, 1160.95, 1160.95, 1160.95, 1157.58],
3: (11) [369.168, 364.21, 361.559, 322.346, 339.027, 346.939, 321.934, 351.404, 360.167, 371.895, 356.232],
我认为使用函数映射是可能的,但如果有人有其他方法可以做到这一点,我将不胜感激。
解决方案
原因.map()
不起作用是因为映射数组会从原始数据集中产生 1->1 结果。看起来您想要一个 4->1 结果,对于原始数据中的每条记录,您想要在 4 个数组中生成一个条目。最简单的方法可能是使用该.reduce()
函数,如下所示:
let data = [{id: "1", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-01", PD_PETROLEO: 369.168, PD_GAS: 96},
{id: "2", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-02", PD_PETROLEO: 364.21, PD_GAS: 96},
{id: "3", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-03", PD_PETROLEO: 361.559, PD_GAS: 96},
{id: "4", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-04", PD_PETROLEO: 322.346, PD_GAS: 81},
{id: "5", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-05", PD_PETROLEO: 339.027, PD_GAS: 44},
{id: "6", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-06", PD_PETROLEO: 346.939, PD_GAS: 44},
{id: "7", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-08", PD_PETROLEO: 321.934, PD_GAS: 44},
{id: "8", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-09", PD_PETROLEO: 351.404, PD_GAS: 44},
{id: "9", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-10", PD_PETROLEO: 360.167, PD_GAS: 44},
{id: "10", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-10", PD_PETROLEO: 371.895, PD_GAS: 44},
{id: "11", COMPLETAMIENTO: "CYB-003TS", FECHA: "2010-06-11", PD_PETROLEO: 356.232, PD_GAS: 66}];
let mappedData = data.reduce((res, curr) => {
// push whatever property you want to each spot in the array
// you can change the order however you'd like
res[0].push(curr.COMPLETAMIENTO);
res[1].push(curr.FECHA);
res[2].push(curr.PD_PETROLEO);
res[3].push(curr.PD_GAS);
return res;
}, [[], [], [], []]); // start with an array of 4 empty arrays into which we can push our values
console.log(mappedData)
推荐阅读
- c - atoi 似乎不适用于我的程序
- laravel - Laravel 创建 .po 和 .mo
- html - 使用 ngb-tabset 和选择器构建多步骤表单
- javascript - 使用 history.back() 函数时如何自动填充输入数据?
- wpf - 在 MVVM 的树节点中设置条件文本
- c# - 无论如何在 ef 核心中使用表后缀名称吗?
- javascript - Recharts:关闭条形图的背景悬停
- c# - 将存储在类列表中的信息打印到控制台
- x86-64 - 如何将 rax 寄存器写入 AVX512 寄存器 zmm26 的四字元素?
- ajax - Ajax/Spring MVC handleHttpRequestMethodNotSupported 不支持请求方法“POST”