【发布时间】:2020-05-27 23:35:34
【问题描述】:
试图找到创建对象数组的最佳方法,其中我每天两次(中午 12:00 之前和中午 12:00 之后)只获得最大值和最小值。结果仍应按时间顺序返回。
我知道最好的方法是:
- 首先根据日期过滤数据(我正在使用moment.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>
【问题讨论】:
标签: javascript arrays date object timestamp