Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按时间步长组织对象数据,以便使用图表JS绘制多个传感器读数与时间的关系图_Javascript - Fatal编程技术网

Javascript 按时间步长组织对象数据,以便使用图表JS绘制多个传感器读数与时间的关系图

Javascript 按时间步长组织对象数据,以便使用图表JS绘制多个传感器读数与时间的关系图,javascript,Javascript,我正在使用chart JS库创建折线图。我使用的数据来自两个不同的温度传感器(传感器1和传感器2),它们不一定具有相同的时间戳。我想将数据拆分为3个数组: 1.传感器1读数 2.传感器2读数 3.时间戳 如果在特定的时间步没有值,则对于另一个传感器的其中一个传感器,阵列应具有一个空白值,如该阵列的索引1:[0,1,2] 以下是数据示例: zdata= {“数据”:[ { “时间戳”:10, “传感器id”:1, “温度”:14.5, }, { “时间戳”:20, “传感器id”:1, “临时工”

我正在使用chart JS库创建折线图。我使用的数据来自两个不同的温度传感器(传感器1和传感器2),它们不一定具有相同的时间戳。我想将数据拆分为3个数组: 1.传感器1读数 2.传感器2读数 3.时间戳

如果在特定的时间步没有值,则对于另一个传感器的其中一个传感器,阵列应具有一个空白值,如该阵列的索引1:[0,1,2]

以下是数据示例:

zdata=
{“数据”:[
{
“时间戳”:10,
“传感器id”:1,
“温度”:14.5,
},
{
“时间戳”:20,
“传感器id”:1,
“临时工”:18,
},
{
“时间戳”:30,
“传感器id”:1,
“温度”:25.5,
},
{
“时间戳”:5,
“传感器id”:2,
“温度”:24.5,
},
{
“时间戳”:20,
“传感器id”:2,
“温度”:29.5,
}
]
};
以及我希望阵列的结果如何:

时间戳:[5,10,20,30]

传感器1:[,14.5,18,25.5]

传感器2:[24.5,,29.5,]

我还需要传感器的数量动态变化,因此,例如,数据可能包含3个传感器读数,我需要生成一个额外的阵列

到目前为止,我尝试了以下操作,但是,'result.temp'操作返回了一个未定义的值,因此代码不起作用

var unique_timestamp=[…新集合(zdata.data.map(item=>item.timestamp));
日志(唯一的时间戳);
var传感器=[…新集合(zdata.data.map(item=>item.sensor_id));
控制台日志(传感器);
//将保存传感器读数的最终阵列
var温度_数据集=[];
对于(i=0;i{
返回(obj.timestamp==唯一的时间戳[j]&&obj.sensor\u id==传感器[i])
})
读数\u arr[j]=结果温度;
}
温度数据集[i]=读数

}
这是一个现代的ES6版本,它可以得到相同的结果,希望更具可读性和性能

代码解释为注释。 最初,我们以时间戳作为关键帧,以传感器作为值来旋转对象。 然后我们使用它来获得时间戳数组和传感器值数组,如图所示

zdata=
{“数据”:[
{
“时间戳”:10,
“传感器id”:1,
“温度”:14.5,
},
{
“时间戳”:20,
“传感器id”:1,
“临时工”:18,
},
{
“时间戳”:30,
“传感器id”:1,
“温度”:25.5,
},
{
“时间戳”:5,
“传感器id”:2,
“温度”:24.5,
},
{
“时间戳”:20,
“传感器id”:2,
“温度”:29.5,
}
]
};
让{sensors,…sensorTimeMap}=zdata.data.reduce((acc,val)=>{
如果(!acc[val.timestamp])
acc[val.timestamp]={};
acc[val.timestamp][val.sensor_id]=val.temp;//根据时间戳旋转数据,以便稍后提供更高性能的查找
如果(!acc.sensors.包括(val.sensor_id))
acc.传感器推送(val.传感器_id)
返回acc;
},{sensors:[]});//由于传感器的数量是动态的,应该从数据对象中提取,因此我们收集阵列中可用的传感器,并创建时间戳图以供将来参考
让timestamp=Object.keys(sensorTimeMap);//生成的轴的所有时间戳
设sensorValArray=sensors.map(sensor=>(Object.values(sensorTimeMap.map)(obj=>obj[sensor]| |“);//给我们一个数组,因为我们无法事先确定有多少传感器,也无法存储在不同的变量中。但这是处理动态长度的唯一方法,因为我们不知道要事先声明多少变量!

日志(时间戳、传感器阵列)仅供参考,JSON是字符串格式;你处理的是对象和数组。没有解释的答案通常不会像有解释的答案那样被高估。嗨,达南贾伊派,这以更简洁的方式解决了我的问题。非常感谢。#@HereticMonkey我已经在代码中添加了解释。我想尽快给出解决方案并解释later@NiamhDonnelly很乐意帮忙。如果答案有助于你解决问题,请随意投票/接受。问你是否需要更清晰。太好了,一旦我有足够的信誉点,我会的,我是新的堆栈溢出张贴。