Учитывая, что у меня есть два массива объектов, которые имеют следующую структуру:
{
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
}
})