gpt4 book ai didi

javascript - 合并相关的时间序列数据

转载 作者:行者123 更新时间:2023-11-30 19:39:22 33 4
gpt4 key购买 nike

假设我有两个具有以下结构的对象数组:

  {
avg: 195.6
max: 195.6
min: 195.6
time: 1552448311000
}

现在举个例子:第一个数组包含温度传感器的数据,第二个数组包含特定发动机负载的数据。要绘制此数据,我需要数据基本上采用以下格式绘制每个点:[负载,温度],因此它是温度与负载图表。

如何连接这两个数组,以便只考虑具有匹配时间戳(一对)的点?这个想法是我最终可以用一个组合数组做这样的事情:

mergedArray.map(x => [x.load, x.avg])

数据在数据量上可能会有差异,例如温度点可能比负载点多很多,所以我需要先过滤温度数据以仅包含匹配时间戳点的点负载系列。

数据示例:

const temperatureData = [
{
avg: 195.6,
max: 195.6,
min: 195.6,
time: '1.1.2019'
},
{
avg: 300,
max: 300,
min: 300,
time: '1.2.2019'
}
]

const loadData = [
{
avg: 195.6,
max: 195.6,
min: 195.6,
time: '1.1.2019'
}
]

const expected = [{
avg: 195.6,
max: 195.6,
min: 195.6,
time: '1.1.2019',
load: 195.6
}]

所以只获取了第一个温度数据,因为它在加载数据中具有匹配的时间戳。

下面是一个漂亮的海湾(?)方法来做到这一点,有什么反馈吗?

    // First filter the load by set load filter
const filteredLoad = load.filter(x => x.avg >= this.props.filter);

// Collect the timestamps of the filtered load
const loadTimeStamps = filteredLoad.map(x => x.time);

const filteredTemperatures = temperaturData.filter(x => loadTimeStamps.includes(x.time))
.map ((c, i) => {

if (!filteredLoad[i]) return null;

return {
...c,
load: filteredLoad[i].avg
}
})

最佳答案

您可以使用循环来过滤和合并数据:

var newData = [];

for (var i = 0; i < temperatureData.length; i++) {
for (var j = 0; j < loadData.length; j++) {
if (temperatureData[i].time === loadData[j].time) {
newData.push(temperatureData[i]);
newData[newData.length - 1].load = loadData[j].avg
j = loadData.length;
}
}
}

现场演示:http://jsfiddle.net/BlackLabel/9xsdqwct/

关于javascript - 合并相关的时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55571835/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com