如果字符串按特定顺序输入,我将如何替换它?

Posted

技术标签:

【中文标题】如果字符串按特定顺序输入,我将如何替换它?【英文标题】:How Would I replace a string if its input in a certain order? 【发布时间】:2022-01-21 18:06:30 【问题描述】:
var xboxConverter = 
  "1" : "Up",
  "2" : "Down",
  "3" : "Down Foward",
  "4" : "Backward",
  "5" : "Standing",
  "6" : "Forward",
  "7" : "Up Backward",
  "8" : "Up",
  "9" : "Up Foward",
  "236S": "Quarter Circle Special",
  ",": "  ",
  "H" : "B",
  "M": "Y",
  "L": "X",
  "S": "A",
  "2" : "Down",
  "RB" : "RB",
  "236" : "Quarter Circle Forward",
  "214" : "Quarter Circle Backwards",
  "214S" : "Quarter Circle Backwards Special",

;

document.querySelector("textarea").addEventListener("keyup", (e) => 
  const input = e.target.value.toUpperCase();
  const inputValidated = input.replace(/[^a-zA-Z0-9 ,]/g, "");
  const arrOfIns = inputValidated.split(" ");
  const arrOfOuts = arrOfIns.map((e) =>
    xboxConverter[e] ? xboxConverter[e] : ""    
  ); 
if (parseInt.innerText == 236 & 214)
return
  const out = arrOfOuts.join(" , ");
  document.getElementById("output").innerText = out;

);

为了更好地描述我的意思,如果有人一起输入 236,它应该说“Quarter Circle Forward”,或者如果他们输入 236RT,它应该说“Quarter Circle Forward Right Trigger”。

【问题讨论】:

你需要将字符串从最长的键解析为最短的开始,而且out只是一个字符串,所以out.input没有任何意义。 我正在努力学习 javascript 没关系,但我必须输入每个字符串“214S”:“Quarter Circle Backwards Special”,有没有让这更容易,他们只需输入 214A 并显示“Quarter Circle Backwards Special”或例如未在 214H 中编码的东西,它会显示“Quarter Circle Backwards Heavy”但不需要像这样对每个字符串进行编码? 输入“236”如何输出“Quarter Circle Forward”?我虽然是“四分之一圈”。 那么 214 会是什么? 214 表示向后四分之一圆。 【参考方案1】:

从您的 cmets 中,我可以理解您正在寻找与用户输入的键匹配的值。您可以简单地检查它而无需任何拆分和 for 循环,例如:

var xboxConverter = 
  "1": "Up",
  "2": "Down",
  "3": "Down Foward",
  "4": "Backward",
  "5": "Standing",
  "6": "Forward",
  "7": "Up Backward",
  "8": "Up",
  "9": "Up Foward",
  "236S": "Quarter Circle Special",
  ",": "  ",
  "H": "B",
  "M": "Y",
  "L": "X",
  "S": "A",
  "2": "Down",
  "RB": "RB",
  "236": "Quarter Circle Forward",
  "214": "Quarter Circle Backwards",
  "214S": "Quarter Circle Backwards Special",

;

document.querySelector("textarea").addEventListener("keyup", (e) => 
  const input = e.target.value.toUpperCase();
  const inputValidated = input.replace(/[^a-zA-Z0-9 ,]/g, "");
  document.getElementById("output").innerText = xboxConverter[inputValidated] ? xboxConverter[inputValidated] : "No data";
);
<textarea></textarea>
<div id="output"></div>

这就是你要找的吗?

【讨论】:

不,不完全是。我需要我显示“Quarter Circle Forward,即使他们输入 2、3、6,而不是 236

以上是关于如果字符串按特定顺序输入,我将如何替换它?的主要内容,如果未能解决你的问题,请参考以下文章

按特定顺序选择特定行[重复]

如何按字母顺序找出下一个字符?

删除功能无法正常工作

如何根据java中的输入数据顺序/名称动态调用不同的setter方法?

如何在Java中替换Char表中的字符

如何在实时代码应用程序中的Mac OS X上收听特定的文本字符串