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

代码训练营申请遇阻:筛选有效灯泡序列号代码求助

编程题错误排查与修正

题目描述

吉姆打算购买一批混合灯泡,当灯泡的序列号为奇数且恰好是6位数字时,灯泡效率最高。请编写代码从给定的serialNumbers数组(示例:[32438, 34193, 149143, 4329429, 98537, 238791, 23492, 298342])中筛选符合条件的序列号,存入efficientSerialNumbers变量,正确结果应为[149143, 238791]。

我的代码

function findEfficientBulbs(serialNumbers) {
    console.log(serialNumbers)
    const efficientSerialNumbers = [];
    // Write your code here

    for (let i= 0 ; i < serialNumbers.length ; i++)
    if (serialNumbers[i].length <=5 || serialNumbers[i].length >=7) {
    serialNumbers[i].shift()
    } else if (serialNumbers[i] % 2 === 1 && serialNumbers[i].length === 6 ) {
        serialNumbers[i].shift()
        efficientSerialNumbers.unshift(serialNumbers[i])
    }
        console.log(efficientSerialNumbers)
        console.log(serialNumbers)
    return efficientSerialNumbers;
}

测试输出

4项测试通过,1项失败:

should return an array

    ✓  Well done!

logs

[ 123123 ]

[]

[ 123123 ]

 
should discard serial numbers with five or fewer figures

    ✓  Well done!

logs

[ 1, 123, 12345 ]

[]

[ 1, 123, 12345 ]

 
should discard serial numbers with seven or more figures

    ✓  Well done!

logs

[ 1234567, 123456789 ]

[]

[ 1234567, 123456789 ]

 
should discard even numbers

    ✓  Well done!

logs

[ 1234, 123456, 12345678 ]

[]

[ 1234, 123456, 12345678 ]

 
should keep all efficient numbers - those that are odd and have six digits in

  ✕ AssertionError: expected [] to deeply equal [ 234567, 456789 ]

logs

[ 123456, 234567, 345678, 456789 ]

[]

[ 123456, 234567, 345678, 456789 ]

问题分析

  • 数字无length属性:数组元素是数字类型,直接调用.length会返回undefined,导致所有长度判断逻辑完全失效。
  • 错误调用shift():shift()是数组方法,用来删除数组首元素,对单个数字调用该方法毫无意义,还会触发隐性错误。
  • 逻辑判断顺序混乱:先判断长度不符合的情况,但因长度判断失效,后续符合条件的数字也无法进入筛选分支。
  • unshift()使用不当:虽然不影响结果正确性,但用unshift()添加元素会逆序存储,通常筛选场景用push()更符合直觉。

修正后的代码

循环版

function findEfficientBulbs(serialNumbers) {
    console.log(serialNumbers)
    const efficientSerialNumbers = [];

    for (let i = 0; i < serialNumbers.length; i++) {
        const num = serialNumbers[i];
        // 两种方式判断6位数:转字符串取长度,或用数值范围
        const isSixDigit = num.toString().length === 6;
        // const isSixDigit = num >= 100000 && num <= 999999;
        const isOdd = num % 2 === 1;

        if (isSixDigit && isOdd) {
            efficientSerialNumbers.push(num);
        }
    }

    console.log(efficientSerialNumbers)
    console.log(serialNumbers)
    return efficientSerialNumbers;
}

更简洁的filter版

function findEfficientBulbs(serialNumbers) {
    console.log(serialNumbers)
    const efficientSerialNumbers = serialNumbers.filter(num => {
        const str = num.toString();
        return str.length === 6 && num % 2 === 1;
    });

    console.log(efficientSerialNumbers)
    console.log(serialNumbers)
    return efficientSerialNumbers;
}

修正说明

  • 通过转字符串或数值范围判断,正确识别6位数字。
  • 保留奇数判断逻辑,确保筛选条件准确。
  • 使用push()或filter()正确收集结果,不再错误修改原数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:47:49