Пытаюсь найти лучший способ создать массив объектов, в котором я получаю только максимальное и минимальное значения два раза в день (до 12:00 и после 12:00). Результат должен возвращаться в порядке времени.
Лучший способ, который я знаю, это сделать:
- Сначала отфильтруйте данные по дню (я использую момент. js)
- Затем отфильтруйте день в 2 разных массива: beforeNoon [], afterNoon []
- Затем получите максимальное значение массивов с помощью reduce
- Затем получите Минимальное значение массивов с помощью команды reduce
- Объедините результаты в 1 массив и отсортируйте по возрастанию
Я надеялся, что будет гораздо более простой способ сделать это .. дайте мне знать, если у вас есть предложения. Заранее благодарим за любые предложения!
const data = [
{"t":"2020-05-27 03:42","v":"2.151"},
{"t":"2020-05-27 08:48","v":"3.125"},
{"t":"2020-05-27 11:54","v":"4.106"},
{"t":"2020-05-27 18:00","v":"5.094"},
{"t":"2020-05-27 21:06","v":"4.088"},
{"t":"2020-05-27 23:12","v":"3.090"},
{"t":"2020-05-28 00:18","v":"2.098"},
{"t":"2020-05-28 03:24","v":"1.114"},
{"t":"2020-05-28 08:30","v":"2.136"},
{"t":"2020-05-28 12:36","v":"3.166"},
{"t":"2020-05-28 17:42","v":"4.202"},
{"t":"2020-05-28 22:48","v":"5.245"},
];
// STEP 1:
// Filter data to only return specific date "2020-05-27"
const today = data.filter( d => moment(d.t).format('YYYY-MM-DD') === '2020-05-27');
console.log('TODAY= ' + JSON.stringify(today));
// STEP 2:
// Divide today's data into half
const todayBeforeNoon = today.filter(d => moment(d.t).format('HH') <= '11');
const todayAfterNoon = today.filter(d => moment(d.t).format('HH') > '11');
console.log('TODAY BEFORE NOON= ' + JSON.stringify(todayBeforeNoon));
console.log('TODAY AFTER NOON= ' + JSON.stringify(todayAfterNoon));
// STEP 3:
// Get the max value per half day
const beforeNoonMax = todayBeforeNoon.reduce( (a, b) => { return (a.v > b.v) ? a : b}, 0);
const afterNoonMax = todayAfterNoon.reduce( (a, b) => { return (a.v > b.v) ? a : b}, 0);
console.log('MAX BEFORE NOON= ' + JSON.stringify(beforeNoonMax));
console.log('MAX AFTER NOON= ' + JSON.stringify(afterNoonMax));
// STEP 4:
// Get the min value per half day
const beforeNoonMin = todayBeforeNoon.reduce( (a, b) => { return (a.v < b.v) ? a : b}, 0);
const afterNoonMin = todayAfterNoon.reduce( (a, b) => { return (a.v < b.v) ? a : b}, 0);
console.log('MIN BEFORE NOON= ' + JSON.stringify(beforeNoonMin));
console.log('MIN AFTER NOON= ' + JSON.stringify(afterNoonMin));
// STEP 5:
// Combine the results into 1 array, and sort by time?
// HELP? SUGGESTIONS?
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js" integrity="sha256-5oApc/wMda1ntIEK4qoWJ4YItnV4fBHMwywunj8gPqc=" crossorigin="anonymous"></script>