在特定条件下删除特定字符串部分的算法



我最近正在努力创建我在标题中描述的算法。 我最新和我认为最好的尝试是以下几点:

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'));
}

最新更新