我创建了一个英语到莫尔斯电码的翻译器,需要在每个莫尔斯电号字母之间留一个空格。为了做到这一点,我在下面可以看到的词典中的每个字母后面都添加了一个额外的空格。然而,这意味着在句子的末尾有一个额外的空格("(。有什么办法可以去掉这个空格吗?
我尝试使用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("");
};
由于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.
};
为与间距无关的值包含空格是一种糟糕的做法;莫尔斯电码字符没有空格。
我建议你在任何英语句子中使用String.prototype.split()
,例如:
englishSentence.split().map(englishChar => morseCodeChar[englishChar]).join(' ');
你可能不得不使用英语句子中的.toLowerCase()
、.toUpperCase()
或.filter()
坏字符。