标题可能有点令人困惑,但我会详细解释。我在用户界面中有一个表格,用户可以从其中选择日期范围,例如;
星期一 - {输入:“13:00:00”,输出:“13:59:59”}
星期二 - [{in:"13:00:00",out:"13:59:59"},{in:"14:00:00",out:"14:59:59"}]
用户一天只能选择多个小时间隔。我已经根据日期对间隔进行了分组,并将间隔组合起来,如
星期二- [{in:"13:00:00",out:"14:59:59"},{in:"14:00:00",out:"14:59:59"}]
在第一次迭代中。但我不知道如何使其间隔超过 4 或 5 小时。仅供引用,我正在使用 lodash 进行排序和分组,并使用 moment 将小时转换为 int。
如果用户输入周二的 5 个时间间隔,例如 [{in:"13:00:00",out:"13:59:59"},{in:"14:00:00",out:"14:59:59"},{in:"15:00:00",out:"15:59:59"},{in:"18:00:00",out:"18:59: 59"},{输入:"19:00:00",输出:"19:59:59"}]
我希望范围像;
[{输入:"13:00:00",输出:"15:59:59"},{输入:"18:00:00",输出:"19:59:59"}]
任何帮助或建议将不胜感激。
最佳答案
假设您的输入数据是按时间顺序排列的,那么实现简化时间表的一种方法是这样的;
var timeSlices = [{in:"13:00:00",out:"13:59:59"},{in:"14:00:00",out:"14:59:59"},{in:"15:00:00",out:"15:59:59"},{in:"18:00:00",out:"18:59:59"},{in:"19:00:00",out:"19:59:59"}],
ts = new Date(),
te = new Date(),
reduced = timeSlices.reduce((p,c) => {p.length ? (ts.setHours(...p[p.length-1].out.split(":")),
te.setHours(...c.in.split(":")),
te-ts <= 1000 ? p[p.length-1].out = c.out
: p.push(c))
: p.push(c);
return p;},[]);
console.log(reduced);
但是,如果具有进入和退出时间的对象位于数组中的任意位置,则必须采用更概念化的方法,例如首先根据其进入时间对它们进行排序。不过这没什么大不了的。
关于javascript - NodeJS 结合对象数组范围属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37398681/