【发布时间】:2021-10-17 01:03:00
【问题描述】:
const VOWELS = ['a', 'e', 'i', 'o', 'u'];
const mostFrequentVowel = function (words, counter = {}) {
let count = 0
if (words.length === 0) {
return ''
}
let lastString = words[words.length - 1]
for (let i = 0; i < lastString.length; i++) {
const letter = lastString[i];
if (VOWELS.includes(letter)) {
count++
if (letter in counter) {
counter[letter] += 1
} else {
counter[letter] = 1
}
}
}
let values = Object.values(counter)
let max = Math.max(...values)
for (let vowel in counter) {
if (counter[vowel] === max) {
return vowel
}
}
return mostFrequentVowel(words.slice(0, words.length - 1), counter)
}
console.log(mostFrequentVowel(['dog', 'cow', 'pig', 'chicken', 'horse'])); // 'o'
mostFrequentVowel(['dog', 'cow', 'pig', 'chicken']); // 'i' or 'o'
我无法更新计数器对象以反映最大的元音。我想知道这是否是 for in 循环接近尾声的问题,或者它是否在第一个 for 循环中存在一些逻辑。
【问题讨论】:
-
为了澄清,你想计算有元音的单词的数量,对吗?不是所有单词中所有元音的数量。
-
是的,我只需要为第一个返回元音'o',为第二个返回'o'或'i'
-
如果后者适合您,请考虑简单地使用
join并从所有合并单词的字符串中计算元音。我相信这会通过您当前的演示输入。 -
如果前一个定义是你想要的,如果每个单词存在多个相同的元音,
join将不起作用。
标签: javascript arrays for-loop object for-in-loop