问题描述
我想创建一个简单的函数,将句子转换为北约音标。该循环对字母表工作正常,但会产生一个奇怪的字符问题。我的代码:
const alphabet = ["Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliett","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","Xray","Yankee","Zulu"];
function phoneticAlph(words) {
let translatedTxt = "";
for (let i = 0; i < words.length; i++) {
for (let x = 0; x < alphabet.length; x++) {
if (words[i].toupperCase() === alphabet[x][0]) {
translatedTxt += `${alphabet[x]} `;
} else if (words[i] === "!" || words[i] === "?" || words[i] === "," || words[i] === ".") {
translatedTxt += words[i];
}
}
}
console.log(translatedTxt)
}
phoneticAlph("!I.a,m!Robot")
这出现在控制台中:
!!!!!!!!!!!!!!!!!!!!!!!!!!India ..........................Alfa,Mike
!!!!!!!!!!!!!!!!!!!!!!!!!!Romeo Oscar Bravo Oscar Tango
我完全不明白发生了什么或如何修复它以正确显示字符。我将非常感谢您的帮助并解释实际发生的情况。
解决方法
似乎在第二个循环中缺少 break 语句,这意味着即使其中一个 if 语句为真,循环也是连续的。尝试在 if 语句中添加 break 语句,以便在您在字母表数组中找到所需内容时停止循环。
,问题是在第二个 for 循环中的 else if。对于每个特殊字符,第一个 if 总是被跳过,而不是 else if 总是被命中。将 else if 部分移到第二个循环之外。
const alphabet = ["Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliett","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","Xray","Yankee","Zulu"];
function phoneticAlph(words) {
let translatedTxt = "";
for (let i = 0; i < words.length; i++) {
for (let x = 0; x < alphabet.length; x++) {
if (words[i].toUpperCase() === alphabet[x][0]) {
translatedTxt += `${alphabet[x]} `;
}
}
if (words[i] === "!" || words[i] === "?" || words[i] === "," || words[i] === ".") {
translatedTxt += `${words[i]} ` ;
}
}
console.log(translatedTxt)
}
phoneticAlph("!I.a,m!Robot")
你可以在命中时继续外循环,else case 必须在外循环中移动:
const alphabet = ["Alfa","Zulu"];
function phoneticAlph(words) {
let translatedTxt = "";
outer: for (let i = 0; i < words.length; i++) {
for (let x = 0; x < alphabet.length; x++) {
if (words[i].toUpperCase() === alphabet[x][0]) {
translatedTxt += `${alphabet[x]} `;
continue outer;
}
}
if (words[i] === "!" || words[i] === "?" || words[i] === "," || words[i] === ".") {
translatedTxt += words[i];
}
}
console.log(translatedTxt)
}
phoneticAlph("!I.a,m!Robot")
我是 javaScript 的新手。但我想我解决了这个问题。首先,您必须从字母以外的字符中删除“单词”。接下来的代码还是一样的。
function phoneticAlph(words) {
let translatedTxt = "";
let cleanWords=words.match(/\w/g); //only letters
for (let i = 0; i < cleanWords.length; i++) {
for (let x = 0; x < alphabet.length; x++) {
if (cleanWords[i].toUpperCase() === alphabet[x][0]) {
translatedTxt += `${alphabet[x]} `;
} else if (cleanWords[i] === "!" || cleanWords[i] === "?" || cleanWords[i] === ","
|| cleanWords[i] === ".") {
translatedTxt += words[i];
}
}
}
console.log(translatedTxt)
}
phoneticAlph("!I.a,m!Robot")