我正在使用 Chart JS 库创建折线图。我使用的数据来自两个不同的温度传感器(传感器 1 和传感器 2),它们可能不一定具有相同的时间戳。我想将数据分成 3 个数组:1. 传感器 1 读数 2. 传感器 2 读数 3. 时间戳
如果在特定时间步长没有值,那么对于另一个传感器的一个传感器,该数组应该有一个空白值,如该数组的索引 1:[0, ,1,2]
以下是数据示例:
zdata =
{ "data": [
{
"timestamp": 10,
"sensor_id": 1,
"temp": 14.5,
},
{
"timestamp": 20,
"sensor_id": 1,
"temp": 18,
},
{
"timestamp": 30,
"sensor_id": 1,
"temp": 25.5,
},
{
"timestamp": 5,
"sensor_id": 2,
"temp": 24.5,
},
{
"timestamp": 20,
"sensor_id": 2,
"temp": 29.5,
}
]
};
以及我希望数组的结果如何:
时间戳:[5,10,20,30]
传感器 1:[,14.5,18,25.5]
传感器 2:[24.5,,29.5,]
我还需要动态更改传感器的数量,因此,例如,数据可能包含 3 个传感器读数,我需要生成一个额外的数组。
到目前为止,我尝试了以下操作,但是,“result.temp”操作返回一个未定义的值,因此代码确实有效。
var unique_timestamps = [...new Set(zdata.data.map(item => item.timestamp))];
console.log(unique_timestamps);
var sensors = [...new Set(zdata.data.map(item => item.sensor_id))];
console.log(sensors);
// Will hold final arrays of sensor readings
var temperature_datasets = [];
for (i = 0; i < sensors.length; i++) {
// Holds the array of temperatures for one sensor
readings_arr =[];
for (j = 0; j < unique_timestamps.length; j++) {
var result = zdata.data.filter(obj => {
return (obj.timestamp === unique_timestamps[j] && obj.sensor_id === sensors[i])
})
readings_arr[j]=result.temp;
}
temperature_datasets[i] = readings_arr
}
我有两个问题:
- 有没有更有效的方法来减少操作?
- 如果没有,为什么我会得到“result.temp”的未定义结果以及如何获得温度值。