Javascript 如何根据最大值和最小值按时间戳的顺序创建对象数组?

Javascript 如何根据最大值和最小值按时间戳的顺序创建对象数组?,javascript,arrays,date,object,timestamp,Javascript,Arrays,Date,Object,Timestamp,试图找到创建一个对象数组的最佳方法,在该数组中,我一天只获取两次最大值和最小值(中午12:00pm之前和中午12:00pm之后)。结果仍应按时间顺序返回 我知道最好的方法是: 首先根据日期过滤数据(我使用的是moment.js) 然后将一天过滤成两个不同的数组:中午之前[],下午[] 然后使用reduce获得数组的最大值 然后使用reduce获得数组的最小值 将结果合并到1个数组中,并按时间升序排序 我希望有一个更简单的方法来做到这一点。。。如果你有任何建议,请告诉我。提前感谢您的建议 con

试图找到创建一个对象数组的最佳方法,在该数组中,我一天只获取两次最大值和最小值(中午12:00pm之前和中午12:00pm之后)。结果仍应按时间顺序返回

我知道最好的方法是:

  • 首先根据日期过滤数据(我使用的是moment.js)
  • 然后将一天过滤成两个不同的数组:中午之前[],下午[]
  • 然后使用reduce获得数组的最大值
  • 然后使用reduce获得数组的最小值
  • 将结果合并到1个数组中,并按时间升序排序
  • 我希望有一个更简单的方法来做到这一点。。。如果你有任何建议,请告诉我。提前感谢您的建议

    const数据=[
    {“t”:“2020-05-2703: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-2803:24”,“v”:“1.114”},
    {“t”:“2020-05-28 08:30”,“v”:“2.136”},
    {“t”:“2020-05-2812:36”,“v”:“3.166”},
    {“t”:“2020-05-2817:42”,“v”:“4.202”},
    {“t”:“2020-05-2822:48”,“v”:“5.245”},
    ];
    //步骤1:
    //过滤数据以仅返回特定日期“2020-05-27”
    const today=data.filter(d=>moment(d.t).format('YYYY-MM-DD')==='2020-05-27');
    log('TODAY='+JSON.stringify(TODAY));
    //步骤2:
    //将今天的数据分成一半
    const todaybeaforeoon=today.filter(d=>moment(d.t).format('HH')moment(d.t.).format('HH')>11');
    log('TODAY beforeon='+JSON.stringify(TODAY beforeon));
    log('todayAfterNoon='+JSON.stringify(todayAfterNoon));
    //步骤3:
    //获取每半天的最大值
    const beforenomax=今天beforenomax.reduce((a,b)=>{return(a.v>b.v)?a:b},0);
    const午后max=todayAfterNoon.reduce((a,b)=>{return(a.v>b.v)?a:b},0);
    log('MAX beforennoon='+JSON.stringify(beforennoonmax));
    log('MAX AFTER NOON='+JSON.stringify(afterNoonMax));
    //步骤4:
    //获取每半天的最小值
    const beforeNoonMin=today beforenoon.reduce((a,b)=>{return(a.v{return(a.v
    
    结果:

    类似ISO 8601格式的优点之一是字符串和数字方法可以直接应用于排序、分组和比较,例如

    let数据=[
    {“t”:“2020-05-2703: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-2803:24”,“v”:“1.114”},
    {“t”:“2020-05-28 08:30”,“v”:“2.136”},
    {“t”:“2020-05-2812:36”,“v”:“3.166”},
    {“t”:“2020-05-2817:42”,“v”:“4.202”},
    {“t”:“2020-05-2822:48”,“v”:“5.245”},
    ];
    让结果=Object.values(
    //排序,不是真的需要,只是为了确保
    data.sort((a,b)=>a.t.localeCompare(b.t))
    //按日期和上午/下午分组
    .减少((acc,el)=>{
    设[d,t]=el.t.split(“”);
    设dayPeriod=parseInt(t)<12?'am':'pm';
    设key=d+'\'+dayperion;
    acc[键]?acc[键]。按下(el):acc[键]=[el];
    返回acc;
    }, {})
    )
    //仅获取am和pm的最大值和最小值
    .减少((acc,el)=>{
    //根据温度对dayPeriod组进行排序
    el.sort((a,b)=>a.v-b.v);
    //最小值将是第一位,最大值将是最后一位
    加速推力(el[0],el[el.长度-1]);
    返回acc;
    }, []);
    console.log(结果)