如何删除 JavaScript 中句子的最后一个字符?

How can I remove the last character of a sentence in JavaScript?

我创建了一个英语到摩尔斯电码的翻译器,它要求每个摩尔斯电码字母之间有一个 space。为了做到这一点,我在字典中的每个字母后面都添加了一个额外的 space ,如下所示。 然而,这意味着在句子的末尾有一个额外的 space (" ")。有什么方法可以删除这个 space?

我尝试使用 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.prototype.split(),例如:

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

您可能不得不使用英文句子中的 .toLowerCase().toUpperCase().filter() 错误字符。

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

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.
    
};