我的if语句中的逻辑有问题。我试图让它检查字符串字符是否等于a,e,i,o或者u。然后,如果是这样,将字符添加到短语字符串中。否则在短语字符串中添加“x”。
if语句似乎忽略了我的OR逻辑并返回true,无论它是否为元音。
function translate(string){
var phrase = "";
for(i=0; i<string.length; i++){
if (string.charAt(i) === "a" || "e" || "i" || "o" || "u"){
phrase += string.charAt(i);
}else{
console.log("x");
}
}
console.log(phrase);
}
translate("this is fun");
任何帮助将不胜感激!谢谢。
答案 0 :(得分:5)
if (string.charAt(i) === "a" || "e" || "i" || "o" || "u"){
这是不正确的。如果第一个条件失败(角色不是"a"
),它将始终是 truthy ,因为它将评估"e"
,这是 truthy ( JavaScript返回条件中表达式的最后一个评估部分。
你可以使用......
// Define them somewhere out of the loop.
var vowels = ["a", "e", "i", "o", "u"];
// Your new condition.
if (vowels.indexOf(string.charAt(i)) > -1) {
你也可以重写整个事情......
var vowels = ["a", "e", "i", "o", "u"];
var phrase = string
.split("")
.filter(function(char) { return vowels.indexOf(char) > -1; })
.join("");
答案 1 :(得分:2)
您需要单独检查每个条件。例如:
if (string.charAt(i) === "a" || string.charAt(i) === "e" || ...);
要减少代码膨胀,您可以设置变量:
var char = string.charAt(i);
if (char === "a" || char === "e" || ...);
或者你可以使用这个indexOf
技巧:
if (["a", "e", "i", "o", "u"].indexOf(string.charAt(i)) > -1);
答案 2 :(得分:1)
在您的代码中,您将string.charAt(i)
与评估为"a" || "e" || "i" || "o" || "u"
的{{1}}进行比较。
你要做的是:
true
在英语中我们说:string.charAt(i) === "a" || string.charAt(i) === "e"
|| string.charAt(i) === "i" || string.charAt(i) === "o" || string.charAt(i) === "u"
但在javascript(以及大多数其他语言)中我们说:if my string is equal to 'a' or 'e' or 'i' ..
答案 3 :(得分:1)
这样做。字符串上的.indexOf()
比数组上的.indexOf()
更广泛可用。
if ("aeiou".indexOf(string.charAt(i)) > -1) {
答案 4 :(得分:1)
Alex的答案相当不错,但不是使用 indexOf 和一个数组(注意 Array.prototype.indexOf 是ES5所以老版浏览器不支持),你可以使用对象:
var vowels = {a:'a', e:'e', i:'i', o:'o', u:'u'};
if (vowels.hasOwnProperty(string.charAt(i).toLowerCase())) {
phrase += string.charAt(i);
} else {
...
}
以上也不区分大小写,因此A,E,I,O和U也会添加到字符串中。如果您希望区分大小写,请删除.toLowerCase()
部分。
function getVowels(s) {
return s.match(/[aeiou]/g);
}
返回一个字符串,其中所有非元音(辅音)都替换为“x”:
function replaceConsonants(s) {
return s.replace(/[^aeiou]/g,'x');
}
返回只有元音的字符串:
function replaceConsonants(s) {
return s.replace(/[^aeiou]/g,'');
}
或
function getVowels(s) {
return s.match(/[aeiou]/g).join('');
}
等