【发布时间】:2021-01-10 10:18:00
【问题描述】:
我想制作班次解析器助手,它是生成工作班次的时间,下面是班次规则
let shift_rule = [
{
shift: '07-12',
start: 7,
finish: 12
},
{
shift: '12-17',
start: 12,
finish: 17
},
{
shift: '17-22',
start: 17,
finish: 22
},
];
如果时移是timeStart = 7,timeFinish = 17
预期输出:
[
{
shift: '07-12',
start: 7,
finish: 12
},
{
shift: '12-17'
start: 12,
finish: 17
},
]
我已经尝试用这段代码解决了
shift_rule
.map((time) => ((timeFinish > time.start)) && time)
.filter(item => typeof item !== 'boolean');
但是当过滤器是time.start = 17,timeFinish = 22时,它显示:
[
{
shift: '07-12',
start: 7,
finish: 12
},
{
shift: '12-17',
start: 12,
finish: 17
},
{
shift: '17-22',
start: 17,
finish: 22
},
]
希望可以用 ES6 函数式解决
【问题讨论】:
-
首先,先使用过滤器再使用地图总是更好更干净。
typeof item !== 'boolean'有点差劲。其次,在您的地图功能中,您没有检查timeStart的任何内容。不应该是time.start >= timeStart && time.finish <= timeFinish吗?
标签: javascript arrays object ecmascript-6 filter