JavaScript递归处理字符串时函数返回值未正确保存问题
问题原因
- 递归调用结果未返回:
shifter函数匹配到首字符为辅音、触发递归调用时,没有将递归返回的处理结果作为当前函数的返回值,计算结果直接丢失,最终函数始终返回最初传入的原始单词。 - 字符串为不可变类型:你对
word执行split生成数组、shift删除首字符的操作,都是基于新生成的数组对象完成,不会修改原始的word字符串变量,最后返回的自然是未修改的原值。
修复后的代码
function deleteConsonants(sentence) { let words = sentence.split(" "); let newWords = []; for (let i = 0; i < words.length; i++) { let newWord = shifter(words[i]); newWords.push(newWord); } return newWords.join(" "); } function shifter(word) { // 边界处理:避免全辅音单词出现空值时报错、死递归 if(!word) return '' const vowels = "aeiouAEIOU"; if (!vowels.includes(word[0])) { // 截掉首字符传入递归,直接返回递归处理后的结果 return shifter(word.slice(1)) } return word } // 测试用例 let a = deleteConsonants("I love pizza") // "I ove izza" let b = deleteConsonants("This is blasphemy sir") // "is is asphemy ir" console.log(a) console.log(b)
内容的提问来源于stack exchange,提问作者KGE
相关产品推荐
相关产品推荐

