You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:07:15