我无法弄清楚如何计算元音,辅音并从用户输入中声明元音单独出现的频率。 用户输入任何文本ex:“Mischief managed!”,结果必须是: a2 e:2 我:2 o:0 你:0 非元音:11
var userData = prompt ("Enter any text here");
var a = 0;
var e = 0;
var i = 0;
var o = 0;
var u = 0;
var consonants = 0;
var count;
for (count = 0; count <= userData.legth; count++){
if((userData.charAt(count).match(/[aeiou]/))){
a++;
e++;
i++;
o++;
u++;
}else if((userData.charAt(count).match(/[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]/))){
consonants++;
}
}
console.log ("a: " + a);
console.log ("e: " + e);
console.log ("i: " + i);
console.log ("o: " + o);
console.log ("u: " + u);
console.log ("consonants: " + consonants);
但它不起作用。我已经在很多其他论坛上搜索过,但是我找不到这样的东西。
答案 0 :(得分:2)
首先,让我们指出一些事情
for (count = 0; count <= userData.legth; count++){
长度缺少字母'n'并且您不需要计数小于或等于因为您已经从索引0开始。所以您只需要< em>小于。
此外:
if((userData.charAt(count).match(/[aeiou]/))){
a++;
e++;
i++;
o++;
u++;
} else if((userData.charAt(count).match(/[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]/))){
consonants++;
}
你在这里做的是,每次它与元音匹配时,你为所有这些增加变量,所以对于单词 hi ,它会打印每一个元音有一个数。所以看看这个:
var userData = prompt("Enter any text here").toLowerCase();
var a = 0;
var e = 0;
var i = 0;
var o = 0;
var u = 0;
var consonants = 0;
var count;
for (count = 0; count < userData.length; count++){
var char = userData.charAt(count);
if(char.match(/[aeiou]/)){
switch (char) {
case 'a':
a++;
break;
case 'e':
e++;
break;
case 'i':
i++;
break;
case 'o':
o++;
break;
case 'u':
u++;
break;
}
} else if(char.match(/[bcdfghjklmnpqrstvwxyz]/)) {
consonants++;
}
}
console.log ("a: " + a);
console.log ("e: " + e);
console.log ("i: " + i);
console.log ("o: " + o);
console.log ("u: " + u);
console.log ("consonants: " + consonants);
我遵循你的逻辑,保持简单,更好的可读性。我们以与您相同的方式匹配正则表达式,但我们也检查现在的确切字符是什么,因此我们可以增加正确的变量。
对于 else if ,为了最小化正则表达式,我们只检查它是否与小写字母之一匹配,因为我们将userData转换为小写,一旦我们得到它:
var userData = prompt("Enter any text here").toLowerCase();
试试我的例子,看看它是否符合您的需求。
答案 1 :(得分:1)
嗯,你需要检查你遇到的元音然后更新 适当的变量。
但很少需要for
。 JavaScript提供更高级别的数组
迭代函数除其他外,将防止这样的错误
作为一个一个错误,就像你的代码中一样: - )
虽然您的输入是字符串,而不是数组,但您可以将其转换
通过使用到一个
String.prototype.split
var input = 'Mischief managed!';
var result = input.split('').reduce(function(result, c){
c = c.toLowerCase();
if(c in result){
result[c] += 1;
}else{
result.other += 1;
}
return result;
}, {a:0, e:0, i:0, o:0, u:0, other:0});
console.log(JSON.stringify(result));
我在这里使用Array.prototype.reduce
,但你可以,
最初,找到Array.prototype.forEach
更容易
好好理解。
答案 2 :(得分:1)
为了更好的编码和性能,我会这样做;
var str = "the quick brown fOx jUmps OvEr the lazy dog";
function getVowelCount(s) {
var lut = {
a: "0",
e: "0",
i: "0",
o: "0",
u: "0"
},
a = s.split("").map(c => c.toLowerCase());
return a.reduce((p, c) => (p[c] && 1 * p[c]++, p), lut);
}
console.log(getVowelCount(str));
&#13;
答案 3 :(得分:0)
您可以使用
var userData = prompt("Enter any text here"),
count = userData.split('').reduce(function (r, a) {
var vowels = ['a', 'e', 'i', 'o', 'u'],
p = vowels.indexOf(a.toLowerCase());
if (~p) {
r[vowels[p]] = (r[vowels[p]] || 0) + 1;
} else {
r['non-vowels']= (r['non-vowels']|| 0) + 1;
}
return r;
}, Object.create(null));
console.log(count);
答案 4 :(得分:0)
首先计算所有字母,然后过滤所需的字母。
function cntLetters(inp){
var result={};
var vowels = 'aeiouy'.split('');
var inpArr=inp.split('');
for(var i=0,n=inpArr.length;i<n;i++){
result[inpArr[i]] = (result[inpArr[i]]||0)+1;
if(vowels.indexOf(inpArr[i]) > -1)
result['vowels'] = (result['vowels'] || 0) + 1;
}
return result;
}
var cnt = cntLetters('see your later');
console.log(cnt['a']);
console.log(cnt['e']);
如果您不想使用不区分大小写var inpArr=inp.toLowerCase().split('');
答案 5 :(得分:0)
我会做这样的事情
var alpha = function(){
this.a = 0;
this.e = 0;
this.i = 0;
this.o = 0;
this.u = 0;
this.other = 0;
}
function counter(word, alpha) {
for (i = 0; i < word.length; i++) {
var chr = word.charAt(i).toLowerCase();
if (alpha.hasOwnProperty(chr)) {
alpha[chr]++;
} else {
alpha.other++;
}
}
}
function checkWord()
{
var a = new alpha();
counter("test", a);
console.log(a);
}
中可以看到行动
答案 6 :(得分:0)
这是另一种方法,但是分割文本,循环每个字母和计算元音的一般想法与其他人发布的内容类似。
getCount = (str) => {
var vowelsCount = 0;
str = str.split('');
for(var i = 0; i<str.length; i++) {
if(str[i] === "a" || str[i] === "e" || str[i] === "i" || str[i] === "o" || str[i] === "u"){
vowelsCount++;
}
}
return vowelsCount;
}
console.log(getCount('onomatopoeia'));
&#13;
答案 7 :(得分:0)
我们可以使用正则表达式来匹配字符串中的元音。
正则表达式,用于匹配字符串中所有元音的出现: / [aeiouAEIOU] +?/ g
下面是工作代码段:
//function that takes string as input
//function returns an object containing vowel count without case in account.
function vowelCount(input) {
//to get vowel count using string.match
var arrVowels =input.match(/[aeiouAEIOU]+?/g);
//acc=accumulator, curr=current value
var countVowCons= arrVowels.reduce(function (acc, curr) {
if (typeof acc[curr.toLowerCase()] == 'undefined') {
acc[curr.toLowerCase()] = 1;
}
else {
acc[curr.toLowerCase()] += 1;
}
return acc;
// the blank object below is default value of the acc (accumulator)
}, {});
countVowCons.NonVowels= input.match(/[^aeiouAEIOU]+?/g).length;
return countVowCons;
}