函数返回值异常:调用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
相关产品推荐
相关产品推荐

