如果有人可以查看我的代碼,我會很高興。我一直在嘗試回傳給定字串中元音的總數。我希望我的代碼考慮到字母的大小寫、字串中的任何空格以及沒有元音。我相信我的if 陳述句有問題,它為字串輸入“Crypt”和“Crypto”回傳 0
function countVowels(str) {
let count = 0;
let arr = str.toLowerCase().split("")
let vowels = ["a","e","i","o","u"]
console.log(arr)
for (let i = 0; i < str.length; i ){
if (arr[i].includes(vowels)){
count
} else {
return 0
}
}
return count
}
console.log(countVowels("Crypto"))
console.log(countVowels("Crypt"))
uj5u.com熱心網友回復:
您在此處生成的代碼存在幾個問題。
第一個是,對于字串中的每個字母,您正在檢查該字母是否包含元音陣列,這永遠不會是真的。你已經有效地寫了這個......
"a".includes(["a", "e", "i", "o", "u"])
這是倒退。
相反,您需要以這種方式詢問陣列是否包含給定的字母:
["a", "e", "i", "o", "u"].includes("a") // true
["a", "e", "i", "o", "u"].includes("s") // false
第二個問題是,在您的else分支中,您return 0. 這將立即停止您的函式并0在您第一次遇到非元音時回傳。而不是return 0,您可以簡單地不采取任何行動,并完全洗掉else分支。
最終你的回圈應該是這樣的:
for (let i = 0; i < str.length; i ){
if (vowels.includes(arr[i])) {
count
}
}
uj5u.com熱心網友回復:
對此有很多解決方案。
我想你才剛剛開始,所以我希望以下內容會有所幫助
function countVowels(str) {
let count = 0;
let arr = str.toLowerCase().split("");
for (let i = 0; i < str.length; i ){
if (arr[i] === "a" || arr[i] === "e" || arr[i] === "i" || arr[i] === "o" || arr[i] === "u")){
//same as count but good practice
count =1
} else {
return 0
}
}
return count
}
console.log(countVowels("Crypto"))
console.log(countVowels("Crypt"))
uj5u.com熱心網友回復:
在您的for回圈中,運算式:
arr[i].includes(vowels)
// It should be...
vowels.includes(arr[i])
.includes()是一個 String 和一個 Array 方法,因此新手可能會感到困惑。通常,您希望在方法前加上用作過濾器的陣列或字串(用于與輸入值進行比較的字串/陣列)。
此外,該else陳述句將縮短您的函式,因為return會立即結束整個函式。該if陳述句就足夠了,如果沒有匹配項,則for回圈將忽略它。
顯示代碼片段
function countVowels(str) {
let count = 0;
let arr = str.toLowerCase().split("");
let vowels = ["a", "e", "i", "o", "u"];
for (let i = 0; i < str.length; i ) {
if (vowels.includes(arr[i])) {
count
}
}
return count;
}
console.log(countVowels("Crypto"))
console.log(countVowels("Crypt"))
作為更有效的替代使用.filter(),像這樣并回傳V.length:
const V = array.filter(char => vowels.includes(char));
顯示代碼片段
function countVowels(str) {
let array = str.toLowerCase().split("");
const vowels = ["a", "e", "i", "o", "u"];
const V = array.filter(char => vowels.includes(char));
return V.length;
};
console.log(countVowels("Crypto"))
console.log(countVowels("Crypt"))
uj5u.com熱心網友回復:
function countVowels(str) {
return str.split(/[aeiou]/).length - 1;
}
uj5u.com熱心網友回復:
語言很復雜。英語中的元音字符比字串中包含的多['a', 'e', 'i', 'o', 'u'],主要是因為“Café”等借詞中出現的重音。
因此,在您嘗試檢測字串中的元音之前,您可能希望使用帶有標志的String.prototype.normalize'NFD'將其分解,以將重音字符分解為其基字符和控制字符。
對于無重音字串,例如'Testing',結果應該與輸入相同。但是對于重音字串,例如'Café',結果會將任何重音字符分解為其基本字符和控制字符:
console.log(('Café').normalize('NFD').split(''));
一旦你完成了這個分解,你就可以使用你的未修改元音串列。我建議使用String.prototype.split將字串轉換為陣列,然后使用Array.prototype.filter從陣列中洗掉所有非元音字符,以便您可以讀取其長度:
function getNumVowels(str) {
const vowels = ['a', 'e', 'i', 'o', 'u'];
const decomposedStr = str.toLowerCase().normalize('NFD');
const strArray = decomposedStr.split('');
const vowelArr = strArray.filter((char) => vowels.includes(char));
return vowelArr.length;
}
console.log(getNumVowels('Testing')); // <- 2
console.log(getNumVowels('Café')); // <- 2
console.log(getNumVowels('thfds ')); // <- 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434504.html
上一篇:如何在字符y仍然在y之后時找到字符x之前的最后一個文本Javascript
下一篇:使用String引數創建結構
