如何删除 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.
};
我创建了一个英语到摩尔斯电码的翻译器,它要求每个摩尔斯电码字母之间有一个 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.
};