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

函数返回值异常:调用getSmallestStringLength为何返回1而非0?

问题分析与修复

问题根源

代码里的if (!result)判断逻辑有漏洞:

  • 初始时result是undefined,!undefined为true,第一次循环会把第一个空字符串的长度0赋值给result
  • 第二次循环时,!0的结果也是true(因为0在JavaScript中属于假值),所以会再次执行result = strs[i].length,把第二个字符串的长度1覆盖了原本正确的0,最终返回错误的结果1

修复方案

可以通过两种方式修复:

方案一:修改判断条件,仅初始化未定义的result

把if (!result)改为if (result === undefined),这样只有当result还没被赋值的时候才初始化,后续即使result是0,也不会进入这个分支:

function getSmallestStringLength(strs) {
  let result;

  for (let i = 0; i < strs.length; i++) {
    if (result === undefined) {
      result = strs[i].length;
    } else if (strs[i].length < result) {
      result = strs[i].length;
    }
  }

  return result;
}
console.log(getSmallestStringLength(["", "h"])); // 输出0

方案二:提前初始化result,从第二个元素开始遍历

这种方式更高效,避免每次循环都判断result状态,同时还能处理空数组的边界情况:

function getSmallestStringLength(strs) {
  if (strs.length === 0) return undefined;
  let result = strs[0].length;

  for (let i = 1; i < strs.length; i++) {
    if (strs[i].length < result) {
      result = strs[i].length;
    }
  }

  return result;
}
console.log(getSmallestStringLength(["", "h"])); // 输出0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:15:57