JS训练营算法题:extractPassword函数无法正确返回有效值求助
问题分析与修复
你的代码核心问题有两个:
- 函数没有返回值:题目要求
extractPassword函数返回处理后的字符串,但你的函数里没有return语句,系统判题是直接调用函数获取返回值,而非读取你定义的全局变量,所以即使控制台输出正确,系统也会判定错误。 - 全局变量的隐患:把
new1定义在全局,多次调用函数时会累积之前的结果,比如第一次调用后new1已有值,第二次调用会在这个基础上继续添加,不符合函数独立调用的要求。
修复后的代码(基于你的循环写法)
function extractPassword(array) { var new1 = []; // 把数组移到函数内部,每次调用都重新初始化 for (var i = 0; i < array.length; i++) { var y = array[i]; if (('a' <= y && y <= 'z') || ('A' <= y && y <= 'Z') || ('0' <= y && y <= '9')) { new1.push(y); } } return new1.join(''); // 添加return语句,返回拼接后的字符串 } // 测试调用 console.log(extractPassword(['a', '-', '~', '1', 'a', '/'])); // 输出'a1a' console.log(extractPassword(['~', 'A', '7', '/', 'C'])); // 输出'A7C'
更简洁的写法(使用数组filter方法)
如果想简化代码,可以用Array.filter配合正则表达式快速过滤有效字符:
function extractPassword(array) { // 用正则匹配a-z、A-Z、0-9的字符,再拼接成字符串 return array.filter(char => /[a-zA-Z0-9]/.test(char)).join(''); }
为什么之前把new1放内部会报错?
你之前把new1移到内部后,应该是忘记添加return new1.join('')语句,导致函数默认返回undefined,系统判题时拿到的是undefined,所以提示错误。只要在函数最后加上返回语句就能解决。
内容的提问来源于stack exchange,提问作者leurop
相关产品推荐
相关产品推荐

