Проблема заключается в javascript область видимости блока.
Вот совершенно альтернативный способ сделать этот код:
/**
* All vowels in lowercase
*/
const vowels = ["a", "e", "i", "o", "u"]
/**
* Check if a character is a vowel
*/
function isVowel(character) {
return !!vowels.find(vowel => character.toLowerCase() === vowel)
}
/**
* Search for vowels in nested arrays
* Return a string of all the vowels concatenated
*/
function searchVowels(arr) {
let result = ""
for (const i of arr) {
if (typeof i === "string") {
for (const j of i) {
if (isVowel(j)) {
result += j.toLowerCase()
}
}
}
else result += searchVowels(i)
}
return result
}
/**
* Count the number of vowels in nested arrays
*/
function countVowels(arr) {
return searchVowels(arr).length
}
/***************************************
***************************************/
const nestedArr = [
"Elie",
["Matt", ["Tim"]],
["Colt", ["Whisky", ["Janey"], "Tom"]],
"Lorien"
]
console.log(searchVowels(nestedArr))
//> "eieaioiaeooie"
console.log(countVowels(nestedArr))
//> 13
Теперь у каждой функции есть только одно задание -search гласные ищет и возвращает гласные, а затем подсчитывает гласные, подсчитывает результаты этого
Конечно, в этом новом случае эти две строки эквивалентны:
const numberOfVowels = countVowels(arr)
const numberOfVowels = searchVowels(arr).length
Функция подсчета гласных, таким образом, не нужна и должна быть полностью удалена