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

JavaScript实现:判断从指定月份起所有status是否为Full

需求与优化方案

需求明确

我们需要判断一个包含month和status属性的对象数组是否满足以下任一条件:

  1. 所有月份的status均为'Full'
  2. 从某个非起始月份开始,到最后一个月份的所有status均为'Full'
    满足任一条件时返回true,否则返回false。

现有代码问题

你提供的identifyStatus函数存在以下问题:

  • 循环变量i未使用let/const声明,会成为全局变量,引发潜在的作用域问题
  • 逻辑漏洞:当数组最后一个元素的status不是'Full'时,仍可能错误返回true
  • 代码冗余,逻辑不够直观

最优实现方案

下面是更高效、逻辑清晰的实现,时间复杂度为O(n),且在多数场景下无需遍历整个数组:

function identifyStatus(data) {
  // 空数组直接返回false(可根据实际需求调整)
  if (data.length === 0) return false;

  // 最后一个元素不是Full,直接返回false(不可能存在符合要求的后缀)
  const lastItem = data[data.length - 1];
  if (lastItem.status !== 'Full') return false;

  // 所有元素都是Full,直接返回true
  if (data.every(item => item.status === 'Full')) return true;

  // 从倒数第二个元素往前遍历,找到第一个非Full的元素
  // 一旦找到,说明该元素之后的所有元素都是Full,符合需求
  for (let i = data.length - 2; i >= 0; i--) {
    if (data[i].status !== 'Full') {
      return true;
    }
  }

  // 走到此处说明所有元素都是Full(前面已经判断过,实际不会执行到)
  return true;
}

逻辑说明

  1. 空数组判断:避免数组为空时出现异常,可根据业务需求调整返回值
  2. 末尾元素校验:如果最后一个月份的status不是'Full',直接返回false——因为无论从哪个月份开始,最后一个月份都属于目标范围,必须为'Full'
  3. 全量校验:用every快速判断所有元素是否都是'Full',是则返回true
  4. 反向遍历找非Full元素:从倒数第二个元素往前找第一个非'Full'的元素,找到则说明该元素之后的所有元素都是'Full',符合“从某一较晚月份开始全为Full”的需求,直接返回true

测试示例

  • 全Full数组:返回true
  • Jan-Mar非Full,Apr-Dec全Full:返回true
  • Nov非Full,Dec为Full:返回true(仅Dec为Full,属于“从较晚月份开始全Full”)
  • Dec非Full:返回false
  • Jan-Nov全Full,Dec非Full:返回false

内容的提问来源于stack exchange,提问作者user3233787

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:29:56