2015-09-28 62 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開始。