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

JavaScript筛选六位奇数序列号时返回空数组问题排查

筛选六位奇数数组的问题修复

我尝试了多种方法实现筛选出由六位奇数组成的数组,但每次尝试都出现不同的控制台错误。以下是错误信息、测试数据集及当前代码:

测试错误信息

1 项通过
4 项失败
should return an array
    ✓  做得好!
日志
[ 123123 ]

should discard serial numbers with five or fewer figures
  ✕ AssertionError: 预期 [ [] ] 深度等于 []
日志
[ 1, 123, 12345 ]

should discard serial numbers with seven or more figures
  ✕ AssertionError: 预期 [ [] ] 深度等于 []
日志
[ 1234567, 123456789 ]

should discard even numbers
  ✕ AssertionError: 预期 [ [] ] 深度等于 []
日志
[ 1234, 123456, 12345678 ]

should keep all efficient numbers - those that are odd and have six digits in
  ✕ AssertionError: 预期 [ [] ] 深度等于 [ 234567, 456789 ]
日志
[ 123456, 234567, 345678, 456789 ]

当前代码

function findEfficientBulbs(serialNumbers) {
    console.log(serialNumbers);
    const efficientSerialNumbers = [];
    const sixDigits = [];
    for (let i = 0; i < serialNumbers.length; i++){
        const six = serialNumbers[i]
        if (six.length === 6){
            sixDigits.push(six)
        }
    }
    let odds = sixDigits.filter(n => n%2)

    efficientSerialNumbers.push(odds)

    return efficientSerialNumbers;
}

问题分析

  1. 数字长度判断无效:你通过six.length === 6判断位数,但传入的是数字类型,数字没有length属性,这个条件永远不成立,导致sixDigits始终为空。
  2. 返回结果嵌套错误:最后将odds数组push进efficientSerialNumbers,导致返回的是嵌套数组[[]],而测试期望的是一维数组。

修复后的代码

方案一(字符串判断位数)

function findEfficientBulbs(serialNumbers) {
    console.log(serialNumbers);
    return serialNumbers.filter(num => {
        const numStr = num.toString();
        return numStr.length === 6 && num % 2 !== 0;
    });
}

方案二(数学方法判断位数,效率更高)

function findEfficientBulbs(serialNumbers) {
    console.log(serialNumbers);
    return serialNumbers.filter(num => {
        // 六位数字范围是 100000 到 999999
        return num >= 100000 && num <= 999999 && num % 2 !== 0;
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:30:20