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

JavaScript双条件筛选序列号代码异常:无法正确过滤偶数求解

解决序列号有效性检查的问题

你的代码有两个核心问题导致无法得到正确结果:

  • 数字类型没有length属性:如果传入的serialNumbers数组里的元素是数字(比如测试用例里的234567这类),直接访问currentNumber.length会得到undefined,undefined === 6永远是false,所以所有元素都无法通过判断。
  • 奇数判断不够严谨:currentNumber % 2 === 1对于负数奇数(比如-234567)会返回false,虽然你的测试用例都是正数,但更通用的写法是用currentNumber % 2 !== 0来判断奇数。

下面是修正后的两种实现方式:

方式一:转字符串判断位数

function findEfficientBulbs(serialNumbers) {
  console.log(serialNumbers);
  const efficientSerialNumbers = [];
  for (let i = 0; i < serialNumbers.length; i++) {
    const current = serialNumbers[i];
    // 转成字符串判断长度,同时判断是否为奇数
    if (current % 2 !== 0 && current.toString().length === 6) {
      efficientSerialNumbers.push(current);
    }
  }
  return efficientSerialNumbers;
}

方式二:用数值范围判断6位数字(更高效)

如果确定序列号都是正整数,用数值范围判断6位数字比转字符串更高效:

function findEfficientBulbs(serialNumbers) {
  console.log(serialNumbers);
  const efficientSerialNumbers = [];
  for (let i = 0; i < serialNumbers.length; i++) {
    const current = serialNumbers[i];
    // 6位数字范围是100000到999999,同时是奇数
    if (current % 2 !== 0 && current >= 100000 && current <= 999999) {
      efficientSerialNumbers.push(current);
    }
  }
  return efficientSerialNumbers;
}

测试这两种写法,都能正确从[123456, 234567, 345678, 456789]中筛选出[234567, 456789]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:47:17