【问题标题】:How can I remove the last character of a sentence in JavaScript?如何删除 JavaScript 中句子的最后一个字符?
【发布时间】:2021-04-15 22:29:22
【问题描述】:

我创建了一个英语到摩尔斯电码的翻译器,它要求每个摩尔斯电码字母之间有一个空格。为了做到这一点,我在字典中的每个字母之后添加了一个额外的空格,如下所示。 但是,这意味着在句子的末尾有一个额外的空格(“”)。有什么办法可以去掉这个空间?

我尝试使用 str.slice 函数,它会删除最后一个字母的整个莫尔斯电码版本。

function morseCode(str) {
morseCode = {
"A": ".- ",
"B": "-... ",
"C": "-.-. ",
"D": "-.. ",
"E": ". ",
"F": "..-. ",
"G": "--. ",
"H": ".... ",
"I": ".. ",
"J": ".--- ",
"K": "-.- ",
"L": ".-.. ",
"M": "-- ",
"N": "-. ",
"O": "--- ",
"P": ".--. ",
"Q": "--.- ",
"R": ".-. ",
"S": "... ",
"T": "- ",
"U": "..- ",
"W": ".-- ",
"X": "-..- ",
"Y": "-.-- ",
"Z": "--.. ",
'1':'.---- ',
'2':'..--- ',
'3':'...-- ',
'4':'....- ',
'5':'..... ',
'6':'-.... ',
'7':'--... ',
'8':'---.. ',
'9':'----. ',}

str = str.replace(/[!,?]/g , '');

str = str.replace(/\s/g, '');

return str.toUpperCase().split("").map(el => {
   return morseCode[el] ? morseCode[el] : el;
}).join("");

};

【问题讨论】:

  • 使用 string.trim() 函数,它会删除字符串开头和结尾的空格
  • 我不禁想知道为什么您不只是在join(" ") 中使用空格,而不是在字母表中包含空格。

标签: javascript string slice morse-code


【解决方案1】:

由于 str.slice 函数将两个索引之间的切片部分作为子字符串返回,因此在您的情况下,您应该使用str.slice(0,-1),即等于str.slice(0, str.length - 1)。这意味着将返回从零索引开始的每个字符,而不传递字符串的最后一个字符。

function morseCode(str) {
    morseCode = {
    "A": ".- ",
    "B": "-... ",
    "C": "-.-. ",
    "D": "-.. ",
    "E": ". ",
    "F": "..-. ",
    "G": "--. ",
    "H": ".... ",
    "I": ".. ",
    "J": ".--- ",
    "K": "-.- ",
    "L": ".-.. ",
    "M": "-- ",
    "N": "-. ",
    "O": "--- ",
    "P": ".--. ",
    "Q": "--.- ",
    "R": ".-. ",
    "S": "... ",
    "T": "- ",
    "U": "..- ",
    "W": ".-- ",
    "X": "-..- ",
    "Y": "-.-- ",
    "Z": "--.. ",
    '1':'.---- ',
    '2':'..--- ',
    '3':'...-- ',
    '4':'....- ',
    '5':'..... ',
    '6':'-.... ',
    '7':'--... ',
    '8':'---.. ',
    '9':'----. ',}
    
    str = str.replace(/[!,?]/g , '');
    
    str = str.replace(/\s/g, '');
    
    return str.toUpperCase().split("").map(el => {
       return morseCode[el] ? morseCode[el] : el;
    }).join("").slice(0,-1);  // this returns the string without the last character.
    
};

【讨论】:

    【解决方案2】:

    在与间距无关的值中包含空格是一种不好的做法;摩尔斯电码字符没有空格。

    我建议在任何英文句子中使用String.prototype.split(),例如:

    englishSentence.split().map(englishChar => morseCodeChar[englishChar]).join(' ');

    您可能必须使用英文句子中的 .toLowerCase().toUpperCase().filter() 坏字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-18
      • 2020-03-12
      • 2013-07-29
      • 1970-01-01
      • 2022-01-24
      • 2021-11-23
      • 2016-04-16
      • 2021-12-11
      相关资源
      最近更新 更多