我正在尝试创建一个函数,在该函数中我接受包含元音的字符串并对其进行迭代,然后将元音推入对象中。我正在使用forEach循环(我不能使用任何其他类型的循环)遍历每个字符以检查字母并查看其是否为元音,如果是,我将元音字符设置为等于对象键和数字元音出现的次数将是该值。到目前为止,这是我的代码:
function vowelCount(str) {
let obj = {}
str.split(' ')
str.forEach(function(val) {
obj.val = 'hi'
})
return obj
}
我知道还需要做很多工作,但是我不确定如何将键设置为与元音和出现次数相等的值。
答案 0 :(得分:2)
function vowelCount(str) {
const vowels = { a: 0, e: 0, i: 0, o: 0, u: 0 };
str.split('').forEach((ch) => {
if (vowels[ch]) {
vowelCount++;
}
});
return vowels;
}
如果需要,可以始终过滤值以排除零计数。 并且不要害怕其他用于迭代的函数,例如:
const vowelCount = (str = '') =>
str.split('').reduce(
(vowels, ch) => {
if (vowels[ch]) {
vowels[ch]++;
}
return vowels;
},
{ a: 0, e: 0, i: 0, o: 0, u: 0 }
);
答案 1 :(得分:1)
obj.val
正在访问val
的属性obj
,因此要动态访问它,它应该是obj[val]
function isVowel(char) {
return "aeiou".includes(char)
}
function vowelCount(str) {
let obj = {}
str.split("").forEach(function (val) {
if (isVowel(val)) {
obj[val] = (obj[val] || 0) + 1
}
})
return obj
}
console.log(vowelCount("aeiouaeiouaaaii"))
答案 2 :(得分:1)
您可以创建所有元音的元音集,然后遍历提供的字符串str
并基于obj
对象中的现有计数添加计数:
function vowelCount(str) {
let obj = {}
const chars = str.toLocaleLowerCase().split('');
const vowels = new Set(["a", "e", "i", "o", "u"]);
chars.forEach(c => {
if (vowels.has(c)) {
obj[c] = (obj[c] || 0) + 1;
}
});
return obj
}
console.log(vowelCount("Hello World! this is a function to count vowels"));