【问题标题】:Trying to understand rövarspråket translator试图理解 rövarspråket 翻译
【发布时间】:2015-09-28 13:03:20
【问题描述】:

我正在做一个初学者练习,创建一个 rövarspråket 翻译器。

编写一个函数 translate() 将文本翻译成 “rövarspråket”。也就是说,将每个辅音加倍并放置一个 中间出现“o”。例如, translate("这很有趣") 应该返回字符串“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”。为什么只在第一个辅音之前而不是全部?

【问题讨论】:

    标签: javascript function if-statement for-loop


    【解决方案1】:

    为什么if (vowels.indexOf(current) != -1) 特别需要-1?我尝试了-2、-1000、1000,但它们都破坏了功能。

    嗯,这正是indexOf 在找不到字符时返回的内容。如果您与其他任何东西进行比较,它会假设总是看到一个元音,并且从不翻译任何东西。

    如果我将y = ""; 更改为y = "XYZ"translate("this is fun") 将返回"XYZtothohisos isos fofunon"。为什么只在第一个辅音之前而不是全部?

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

    【讨论】:

      【解决方案2】:
      • indexOfvowels 中找不到current 时,会准确返回-1。这是来自其他语言的旧约定,其中返回值都需要是相同的类型(在这种情况下为整数)。如果今天发明了 Javascript,它可能会返回 nullfalse

      • y 是,仅在此函数中,函数的返回值。它一开始是空的,for 循环的每次迭代都会向y 添加更多文本。如果您设置y="XYZ",它将在XYZ 之后添加文本。该函数的开头是一个空的y

      【讨论】:

        猜你喜欢
        • 2020-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-17
        相关资源
        最近更新 更多