javascript - NodeJS 结合对象数组范围属性

标签 javascript arrays node.js object

标题可能有点令人困惑,但我会详细解释。我在用户界面中有一个表格,用户可以从其中选择日期范围,例如;

星期一 - {输入:“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/

相关文章:

javascript - HTTP post 请求与 DB 请求不同步

javascript - 更改所选 div onclick 的背景颜色不起作用?

javascript - React-router - 通过 history.push() 导航刷新页面

javascript - 如何在 Javascript 中将文本框的输入存储在数组中

java - Groovy Array.addAll 方法从原始数组中删除元素

javascript - 将 CKEditor/TinyMCE 与 Meteor 一起使用

javascript - 使用 javascript 从字符串中获取数字

arrays - 编写一次并行数组 Haskell 表达式,在 CPU 和 GPU 上运行 repa 并加速

arrays - 使用矢量运算在 MATLAB 中按幅度对矢量条目进行排名

node.js - npm启动后返回Cmder提示符