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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:27:02