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

JS训练营算法题:extractPassword函数无法正确返回有效值求助

问题分析与修复

你的代码核心问题有两个:

  1. 函数没有返回值:题目要求extractPassword函数返回处理后的字符串,但你的函数里没有return语句,系统判题是直接调用函数获取返回值,而非读取你定义的全局变量,所以即使控制台输出正确,系统也会判定错误。
  2. 全局变量的隐患:把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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:55:32