试图了解rövarspråket翻译

时间:2015-09-28 13:03:21

标签: javascript function if-statement for-loop

我正在做一个初学者练习,创建一个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-10001000,但它们都破坏了功能。

  • 如果我将y = "";更改为y = "XYZ",则translate("this is fun")会返回“XYZtothohisos isos fofunon”。为什么它只在第一个辅音之前而不是所有的辅音?

2 个答案:

答案 0 :(得分:2)

  • indexOf-1中找不到current时会准确返回vowels。这是其他语言的旧约定,其中返回值都需要是相同的类型(在本例中为整数)。如果今天发明了Javascript,它可能会返回nullfalse

  • 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是累加器,缓冲区,无论你可以称之为什么,翻译结果都是逐项附加的。它自然地开始(用初始化)空字符串。