JavaScript如何根据开关触发时序数组生成设备通断状态数组
JavaScript 实现开关时序状态生成方案
核心逻辑
仅需一次遍历即可完成计算,执行效率极高:
- 用临时变量记录当前设备的开关状态,默认初始为关闭(可自定义)
- 每一位时间点按优先级处理触发信号:关触发生效则设为关闭,开触发生效则设为开启,无触发则保持上一状态
- 每轮判断后将当前状态存入结果数组即可
代码实现
function getDeviceStatusArr(switchOnArr, switchOffArr, triggerPriority = 'off') { // 入参合法性校验 if (switchOnArr.length !== switchOffArr.length) { throw new Error('开触发数组和关触发数组的长度必须一致'); } const result = []; // 初始状态默认关闭,可根据实际需求修改为1(默认开启) let currentStatus = 0; const arrLength = switchOnArr.length; for (let i = 0; i < arrLength; i++) { const hasOnTrigger = switchOnArr[i] === 1; const hasOffTrigger = switchOffArr[i] === 1; // 按优先级处理同时间点的双触发情况 if (triggerPriority === 'off') { if (hasOffTrigger) currentStatus = 0; else if (hasOnTrigger) currentStatus = 1; } else { if (hasOnTrigger) currentStatus = 1; else if (hasOffTrigger) currentStatus = 0; } result.push(currentStatus); } return result; }
测试用例
const switchOn_arr = [0,1,0,0,0,0,0,1,1,0,0]; const switchOff_arr= [1,0,0,0,1,0,0,0,0,1,0]; console.log(getDeviceStatusArr(switchOn_arr, switchOff_arr)); // 输出:[0,1,1,1,0,0,0,1,1,0,0],和示例完全匹配
性能说明
- 时间复杂度为O(n),n为数组长度,仅需单次遍历无额外计算
- 空间复杂度为O(n),仅占用结果数组的存储开销,无冗余内存占用
- 支持处理百万级长度的时序数组,性能无损耗
适配说明
- 如果设备默认状态为开启,修改
currentStatus初始值为1即可 - 如果触发信号用布尔值存储而非0/1,将
hasOnTrigger和hasOffTrigger的判断去掉===1即可适配 - 同时间点同时触发开和关的场景,传第三个参数为
on即可改为开优先逻辑
内容的提问来源于stack exchange,提问作者LotsOfQuestions
相关产品推荐
相关产品推荐

