我在解决方案附近吗?我总是得到双倍数量的辅音。
我确信这是正确的方法。
function consonants(str) {
var countConsonants = 0;
for (var i = 0; i <= str.length; i++) {
if (str[i] !== "a" || str[i] !== "e" || str[i] !== "i" ||
str[i] !== "o" || str[i] !== "u" || str[i] !== " ") {
countConsonants += 1;
}
}
return (countConsonants);
}
consonants("asdfghaaa");
&#13;
我期待5的回答,即sdfgh
是辅音。
答案 0 :(得分:5)
你的逻辑是有缺陷的,你的条件中的运算符应该是AND &&
而不是OR ||
,因为你想比较所有的chars而不仅仅是其中一个:
function consonants(str) {
var countConsonants = 0;
for (var i = 0; i < str.length; i++) {
if (str[i] !== "a" && str[i] !== "e" && str[i] !== "i" &&
str[i] !== "o" && str[i] !== "u" && str[i] !== " ") {
countConsonants++;
}
}
return (countConsonants);
}
console.log(consonants("asdfghaaa"));
&#13;
注意:循环应该停在length-1
,因为数组是基于0的,所以替换:
for (var i = 0; i <= str.length; i++) {
__________________^^
通过:
for (var i = 0; i < str.length; i++) {
__________________^
希望这有帮助。
答案 1 :(得分:2)
你的回答几乎是正确的。唯一的问题是||
而不是&&
。你检查它不是一个AND它不是e而它不是我等等。你的函数对于每一个字母都是真的,因为a是(不是||不是e),对吗?
答案 2 :(得分:2)
你可以做到
let str = 'asdfghaaa';
let result = str.split('').filter(e => e.match(/[^aeiou]/) != null).length;
console.log(result);
&#13;
答案 3 :(得分:2)
计数中的主要问题在于你的条件。
当其中一个条件失败时,你会增加辅音的数量(这就是||
所做的,称为OR运算符)。因此,无论何时角色!== "a"
或!== "e"
,您都会增加计数,这是错误的。 (想象一下a是!== 'e'
,所以你把它算作一个辅音。)
将||
二元运算符更改为&&
(AND);这样,只要当前字符str[i]
不在你要验证的值(a,e,i,o,u,'')中,你只会增加辅音计数。
正如其他人指出的那样,你也可能遇到错误,因为i的最大值应该是Length-1。
还需要考虑其他问题:
对于初学者来说,这可能不相关,但是值得在你的皮肤下获取这些技术:创建一个包含你要验证的所有值的数组更具可读性[“a”,“e”然后,对于源字符串中的每个字符,只需验证array.indexOf(str [i])&gt; = 0(这意味着该字符包含在数组中)。
答案 4 :(得分:1)
您需要和您的条件,因为如果您使用||
,条件总是评估为真。你的循环应该从0到索引&lt; str.length。
function consonants(str) {
var countConsonants = 0;
for (var i = 0; i < str.length; i++) {
if (str.charAt(i) !== "a" && str.charAt(i) !== "e" && str.charAt(i) !== "i"
&& str.charAt(i) !== "o" && str.charAt(i) !== "u" && str.charAt(i) !== " ") {
countConsonants++;
}
}
return countConsonants;
}
console.log(consonants("asdfghaaa"));
&#13;
答案 5 :(得分:1)
function consonants (str) {
return str.match(/[aeoiu]/gi)||[].length;
}
长串可能不好。
答案 6 :(得分:0)
我也遇到过这个挑战,我是这样做的:
const paragraph = "A quick brow fox is trying to bite me."
paragraph.match(/(?![aeiou])[a-z]/gi, "").length
来源:https://forum.freecodecamp.org/t/regex-for-consonants/282833/4
答案 7 :(得分:0)
这是一个工作示例
let str="Hello world.";
let vowel=str.match(/[aeiou]/gi).length;
let consonant = str.match(/[^aeiou .]/gi).length;
console.log("Vowel "+vowel+"\n");
console.log("Vowel "+consonant+"\n");