微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环重复添加字符“!?.,”,即使它不应该

如何解决循环重复添加字符“!?.,”,即使它不应该

我想创建一个简单的函数,将句子转换为北约音标。该循环对字母表工作正常,但会产生一个奇怪的字符问题。我的代码

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")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。