【发布时间】:2021-12-04 00:09:15
【问题描述】:
我需要计算嵌套数组中的元音,我想用闭包来避免全局命名空间污染。 这是我的代码:
let nestedArr = [
"Elie",
["Matt", ["Tim"]],
["Colt", ["Whiskey", ["Janey"], "Tom"]],
"Lorien"
];
function countVowels() {
let vowelsCount = 0;
let vowels = ['a', 'e', 'i', 'o', 'u'];
return function foo(arr) {
for (let i = 0; i < arr.length; i++) {
if (typeof arr[i] === 'string') {
for (let letter of arr[i]) {
if (vowels.includes(letter.toLowerCase())) {
vowelsCount++;
}
}
} else {
return foo(arr[i]);
}
}
return vowelsCount;
}
}
const counter = countVowels();
console.log(counter(nestedArr));
我希望元音的数量正确,但得到 5 个。我尝试调试并看到它在最深的子数组“Tim”之后停止,所以显然我的函数没有升级,我错过了一些东西。
我怎样才能做到这一点?
提前谢谢你。
【问题讨论】:
标签: javascript recursion multidimensional-array closures