如何让Node-RED排班脚本在数组末尾后回到起始位置?
解决三班倒排班循环问题
你的问题核心是没有对天数做循环处理,当计算出的day超过数组长度(20)后,数组索引会越界,自然取不到循环后的排班值。用JavaScript的**取模运算符%**就能轻松实现循环逻辑——它会返回两个数相除后的余数,刚好能让索引始终落在数组的有效范围内。
修改关键代码
把原来获取排班的这一行:
var change = (list[(day - 1)]);
改成:
var change = list[(day - 1) % list.length];
list.length就是数组的长度(这里是20),不管day多大,(day-1) % list.length的结果都会在0到19之间,完美实现第20天后回到数组起始位置的需求:
- 当
day=20时,(20-1)%20=19,对应list[19](free6) - 当
day=21时,(21-1)%20=0,对应list[0](night1)
优化后的完整代码
还可以去掉重复声明的var day,让代码更简洁:
var dayStart = new Date(2023, 2, 4); const list = ['night1', 'night2', 'night3', 'night4', 'free_n', 'afternoon1', 'afternoon2', 'afternoon3', 'afternoon4', 'free_a', 'morning1', 'morning2', 'morning3', 'morning4', 'free1', 'free2', 'free3', 'free4', 'free5', 'free6']; const date = new Date(); var day = Math.floor((date.getTime() - dayStart.getTime()) / (1000 * 60 * 60 * 24)) + 1; var change = list[(day - 1) % list.length]; msg.day = day; msg.payload = change; return msg;
内容的提问来源于stack exchange,提问作者MarekW
相关产品推荐
相关产品推荐

