我正在做一个初学者练习,创建一个rövarspråket翻译。
编写一个将文本翻译成的函数translate() “rövarspråket”。也就是说,每个辅音加倍并放置一个 两者之间发生“o”。例如,翻译(“这很有趣”) 应该返回字符串“tothohisos isos fofunon”。
我想出的解决方案很糟糕,所以我发现了一个here,我正在努力理解它。
var translate = function(text) {
var string = text.toLowerCase();
var vowels = ["a", "e", "i", "o", "u", " "];
var y = "";
for (i = 0; i < string.length; i++) {
var current = string.charAt(i);
if (vowels.indexOf(current) != -1) {
y = (y + (current));
} else {
y = (y + (current + "o" + current));
}
}
return y;
}
console.log(translate("this is fun"));
为什么if (vowels.indexOf(current) != -1)
需要具体-1
?我尝试了-2
,-1000
,1000
,但它们都破坏了功能。
如果我将y = "";
更改为y = "XYZ"
,则translate("this is fun")
会返回“XYZtothohisos isos fofunon”。为什么它只在第一个辅音之前而不是所有的辅音?
答案 0 :(得分:2)
indexOf在-1
中找不到current
时会准确返回vowels
。这是其他语言的旧约定,其中返回值都需要是相同的类型(在本例中为整数)。如果今天发明了Javascript,它可能会返回null
或false
。
y
是仅此函数,函数的返回值。它从空开始,for
循环的每次迭代都会向y
添加更多文本。如果您设置y="XYZ"
,则会在XYZ
之后添加文字。该函数的目的是从空y
开始。
答案 1 :(得分:2)
为什么
if (vowels.indexOf(current) != -1)
需要-1具体?我试过-2,-1000,1000,但它们都破坏了这个功能。
嗯,这就是找不到角色时indexOf
返回的内容。如果你比较其他任何东西,它会假设总是看到一个元音,并且从不翻译任何东西。
如果我将
y = "";
更改为y = "XYZ"
,则translate("this is fun")
会返回"XYZtothohisos isos fofunon"
。为什么它只在第一个辅音之前而不是所有的辅音?
因为它与辅音无关。 y
是累加器,缓冲区,无论你可以称之为什么,翻译结果都是逐项附加的。它自然地开始(用初始化)空字符串。