javascript - 在给定特定条件的情况下删除特定字符串的部分的算法

标签 javascript node.js discord.js

我最近正在努力创建我在标题中描述的算法。我最近的、我认为最好的获得结果的尝试如下:

   function outPut (intake){
  messagePrefab = `\n<:normal:624712757496905729>: x${normal}\n<:fire:624712757329264650>: x${fire} \n<:water:624712756834336788>: x${water}\n<:electr:624712757974925313>: x${electr} \n<:grass:624712758973169685>: x${grass} \n<:ice:624712757006172174>: x${ice} \n<:fight:624712757928919061>: x${fight} \n<:poison:624712758885220382>: x${poison} \n<:ground:624712758314926084>: x${ground} \n<:flying:624712757391917058>: x${flying} \n<:psychc:624712758520446992>: x${psychc} \n<:bug:624712756582547456>: x${bug} \n<:rock:624712758847602698>: x${rock} \n<:ghost:624712756699856907>: x${ghost} \n<:dragon:624712756821622786>: x${dragon} \n<:dark:624688707135471624>: x${dark} \n<:steel:624712757555625985>: x${steel} \n<:fairy:624712758641950721>: x${fairy}`  

  var a = messagePrefab.split("\n");
  a.forEach(
    (out) => {
       if(out.endsWith("x1")){
        temp1 = a.indexOf(out);
        a.splice(temp1, 1);
      } 
      console.log(out);
    }
  )
message.reply(a);
return;
}

所以你可以猜到我有更多的算法,它们只是改变字符串内一些变量的值。该字符串向我显示了正确的值,但我提示该字符串显示了不必要的值。这些不必要的值是变量等于“1”时的值。为了更简单,如果字符串内的变量具有值“1”,那么字符串中不需要它,也不需要它后面的自定义表情。

我的算法应该将消息分割成一个数组,并逐一检查数组中是否有任何元素以 x1 结尾,如果它看到它,它会删除它,这是理论上的,但由于某种原因字符串的输出结果不变。

最佳答案

在使用高阶函数迭代数组时修改数组通常是不好的做法;这可能会导致意想不到的结果。无论如何,我建议只使用 Array.filter ;这更容易。似乎 message.reply 会接受一个字符串,而不是一个数组?:

function outPut(intake){
  messagePrefab = `\n<:normal:624712757496905729>: x${normal}\n<:fire:624712757329264650>: x${fire} \n<:water:624712756834336788>: x${water}\n<:electr:624712757974925313>: x${electr} \n<:grass:624712758973169685>: x${grass} \n<:ice:624712757006172174>: x${ice} \n<:fight:624712757928919061>: x${fight} \n<:poison:624712758885220382>: x${poison} \n<:ground:624712758314926084>: x${ground} \n<:flying:624712757391917058>: x${flying} \n<:psychc:624712758520446992>: x${psychc} \n<:bug:624712756582547456>: x${bug} \n<:rock:624712758847602698>: x${rock} \n<:ghost:624712756699856907>: x${ghost} \n<:dragon:624712756821622786>: x${dragon} \n<:dark:624688707135471624>: x${dark} \n<:steel:624712757555625985>: x${steel} \n<:fairy:624712758641950721>: x${fairy}`;

  var a = messagePrefab.split("\n");
  a = a.filter(out => !out.endsWith("x1"));
  message.reply(a.join("\n"));
}

您还可以使用简单的正则表达式进行相同的过滤:

function outPut(intake){
  messagePrefab = `\n<:normal:624712757496905729>: x${normal}\n<:fire:624712757329264650>: x${fire} \n<:water:624712756834336788>: x${water}\n<:electr:624712757974925313>: x${electr} \n<:grass:624712758973169685>: x${grass} \n<:ice:624712757006172174>: x${ice} \n<:fight:624712757928919061>: x${fight} \n<:poison:624712758885220382>: x${poison} \n<:ground:624712758314926084>: x${ground} \n<:flying:624712757391917058>: x${flying} \n<:psychc:624712758520446992>: x${psychc} \n<:bug:624712756582547456>: x${bug} \n<:rock:624712758847602698>: x${rock} \n<:ghost:624712756699856907>: x${ghost} \n<:dragon:624712756821622786>: x${dragon} \n<:dark:624688707135471624>: x${dark} \n<:steel:624712757555625985>: x${steel} \n<:fairy:624712758641950721>: x${fairy}`;
  message.reply(messagePrefab.replace(/\n.*?x1(?:\n|$)/ig, '\n'));
}

关于javascript - 在给定特定条件的情况下删除特定字符串的部分的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327838/

相关文章:

javascript - WebGL 计算机图形学 vec4?

javascript - 更改 ExtJS Grid/DatePicker 中使用的短/长月份名称

javascript - 在 Iframe 页面中添加/更改 css

javascript - Heroku - NodeJS 无法将日期转换为 UTC

javascript - 为什么我无法在事件回调中捕获 discord.js promise 拒绝?

javascript - discord.js v12 检查用户是否正在流式传输

javascript - 在容器中单击的位置创建 div

javascript - 有效的 json 字符串但无法解析

javascript - 错误: create-react-app Aborting installation

javascript - Node.Js 14 版抛出 e;不和谐机器人的错误(discord.js)