2015-09-28 26 views
1

我正在做一个初学者练习,创建一个rövarspråket翻译。试图了解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",则返回“XYZtothohisos isos fofunon”。为什么只在第一个辅音之前,而不是所有的辅音?

回答

2

为什么if (vowels.indexOf(current) != -1)不需要专门-1?我尝试了-2,-1000,1000,但他们都打破了功能。

那么,这正是indexOf当没有找到该字符时返回的内容。如果你与其他任何东西相比,它会假设总是看到一个元音,并且不会翻译任何东西。

如果我改变y = "";y = "XYZ"translate("this is fun")回报"XYZtothohisos isos fofunon"。为什么只在第一个辅音之前,而不是所有的辅音?

因为它与辅音无关。 y是累加器,缓冲区,无论你怎么称呼它,翻译的结果都是逐项添加到其中的。它自然开始(用空字符串初始化)。

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

  • y是,这个函数中只有这个函数的返回值。它开始为空,并且for循环的每次迭代都会向y添加更多文本。如果你设置了y="XYZ",它会在XYZ之后添加文本。该功能的目的是从一个空的y开始。