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

判断字符数组能否组成目标字符串的JavaScript算法总返回undefined如何解决

问题分析

返回undefined的核心原因

你编写的arrStr函数没有显式声明返回值,JavaScript规则中,函数没有通过return关键字返回内容时,默认返回undefined。你写的三目运算表达式仅完成了计算逻辑,结果没有被返回给函数调用方。

额外逻辑隐患

当前实现还有两个和需求不符的潜在问题:

  • 你预期的需求是「字符数组可以组成指定目标字符串」,但现有逻辑只能判断数组拼接后的字符串包含目标字符串作为子串,无法满足「字符重排可组成目标串」「拼接结果和目标串完全相等」这类常见的同需求场景。
  • String.prototype.match()接收字符串参数时会隐式转为正则表达式,如果目标字符串包含.、*、+这类正则特殊字符,会出现非预期的匹配结果。如果仅需判断子串包含关系更推荐用includes()方法,判断字符串全等直接用===运算符即可。
修复代码

仅解决返回undefined问题

function arrStr(arr,str) {
  // 新增return关键字返回运算结果
  return cleanArray(arr).match(str) ? true : false
}

function cleanArray(arr){
    return arr.join('')
}

更稳妥的全等判断实现(匹配数组拼接后等于目标串的需求)

function arrStr(arr, target) {
  return arr.join('') === target
}

字符可重排组成目标串的实现(匹配字符频率一致即可组成的需求)

function canConstruct(arr, target) {
  // 长度不一致直接返回false
  if (arr.length !== target.length) return false
  const charCount = {}
  // 统计字符数组的字符频率
  for (const char of arr) {
    charCount[char] = (charCount[char] || 0) + 1
  }
  // 匹配目标串的字符频率
  for (const char of target) {
    if (!charCount[char]) return false
    charCount[char]--
  }
  return true
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:24:03