我最近在努力创建标题中描述的算法。我认为获得结果的最新尝试是:
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结尾(如果看到的话),然后将其删除,这在理论上是合理的,但是出于某种原因,字符串的输出出来不变。
答案 0 :(得分:2)
使用高阶函数遍历数组时,通常不建议修改数组。可能导致意外结果。我建议还是使用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'));
}