变量没有被保存

variable isn't getting saved

我正在尝试使用递归来解决问题。 objective是取一个输入字符串句子,return一个新句子,其中每个单词的首字母都被删除,直到每个单词的首字母为元音。

这是我的尝试:

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) {
    let vowels = "aeiouAEIOU";
    let wordArr = word.split("")
    if (!vowels.includes(wordArr[0])) {
        wordArr.shift()
        newWordArr = wordArr.join("")
        shifter(newWordArr)
    }
    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)

我 运行 Chrome 的调试器,似乎函数“shifter”工作正常,直到它到达 return 一个词的步骤。我的变量“newWord”,被推送到新数组的变量,由于某种原因最终成为旧的,未更改的单词版本。

像这样的东西应该可以工作:

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) {
    let vowels = "aeiouAEIOU";
    let wordArr = word.split("")
    if (!vowels.includes(wordArr[0])) {
        wordArr.shift()
        newWordArr = wordArr.join("")
        return shifter(newWordArr)
    }
  return word
}

如果您删除 if 块外的 return,您将收到“超出最大调用堆栈大小”错误。你两个都需要