TypeScript函数无法返回完整数组值的问题排查
问题成因
代码存在两处逻辑错误,导致返回结果不完整:
- 作用域引用错误:
createSentence函数定义的入参是letters,但内部遍历字符时没有使用传入的形参,反而直接引用了全局作用域的phrase变量,传入其他字符数组时函数会完全失效。 - 边界逻辑缺失:现有拼接逻辑只有遍历到空格字符时,才会把当前累计拼接的字符串存入结果数组。测试用例里最后一段字符
world末尾没有空格,循环结束后这部分内容一直存在临时变量add中,没有被推入结果数组,最终返回值只有第一个拼接完成的单词hello。
修复方案
- 将函数内部遍历的目标从全局变量
phrase替换为传入的形参letters,保证函数入参生效。 - 在遍历逻辑结束后,额外判断临时变量
add是否还有剩余内容,若有则推入结果数组,补全最后一段无空格收尾的字符拼接。
修复后的完整可运行代码如下:
var phrase = [ 'h', 'e', 'l', 'l', 'o',' ', 'w', 'o', 'r', 'l', 'd' ]; let sentence: string[] = createSentence(phrase); sentence.forEach(letter => { console.log(letter); }); function createSentence(letters: string[]): string[] { var add = ""; var result: string[] = []; // 遍历传入的形参letters而非全局变量phrase letters.forEach(unionL => { if (unionL != ' ') { add += unionL; } else { result.push(add); add = ""; } }); // 循环结束后推入最后一段拼接内容 if (add) { result.push(add); } return result; }
修复后运行返回结果为['hello', 'world'],符合按空格拆分拼接单词的预期。如果需求是直接拼接成完整的hello world整句字符串,可以直接调用数组原生方法phrase.join('')实现,无需手动编写遍历逻辑。
内容的提问来源于stack exchange,提问作者Aquiles Bailo
相关产品推荐
相关产品推荐

