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; }
问题分析
- 数字长度判断无效:你通过
six.length === 6判断位数,但传入的是数字类型,数字没有length属性,这个条件永远不成立,导致sixDigits始终为空。 - 返回结果嵌套错误:最后将
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
相关产品推荐
相关产品推荐

