当我提出问题时,我有这些命令正常工作但未经过验证,这意味着如果我输入一个名称,它只会使记录无法验证数组中是否已存在此名称。
这听起来很简单,但我尝试使用array.find
进行验证,然后在插入之前与值进行比较但是它不起作用:例如在命令track
中我试图验证您尝试插入的名称是否已经存在。在命令untrack
中,如果名称不存在则发送消息,因为这是另一个问题:如果该名称不存在,该命令将删除最后插入的记录。
如果有人知道如何进行此类验证,我将不胜感激。
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
if (command === "track") {
let [playerName, playerType] = args;
list.push({
name: playerName,
type: playerType
}) var logger = fs.createWriteStream('./realmtrack-config.json')
logger.write(JSON.stringify(config)) message.reply(`Player being tracked!`);
}
if (command === "untrack") {
let [playerName, playerType] = args;
let entry_to_delete = list.find((e: any) => e.name === playerName);
list.splice(list.indexOf(entry_to_delete), 1);
var logger = fs.createWriteStream('./realmtrack-config.json');
logger.write(JSON.stringify(config));
message.reply(`${playerName} stopped being tracked!`);
}
你有一个对象数组
let list = [
{ name: "Joe", type: "Cool" },
{ name: "Sally", type: "Cool"}
]
您可以创建以下函数来检查“Sally”是否是其中一个对象的名称。
function(obj) {
return obj.name === "Sally"
}
我们可以通过ES6箭头功能缩短它
obj => obj.name === "Sally"
接下来,我们可以在list
中搜索一个参数,该参数在传递给该函数时将返回true
。
list.some(obj => obj.name === "Sally")
只有当数组中的所有元素在传递给回调函数时都返回false时,.some
才会返回false。否则,它返回true。
我们可以在消息处理程序的开头附近添加以下行。
const isBeingTracked = list.some(obj => obj.name === args[0])
对于track
命令,您可以添加if(!isBeingTracked) { /* ... */ }
(!
表示“not”)。对于untrack
命令,您可以添加if(isBeingTracked) { /* ... */ }
。 /* ... */
是您将替换实际代码。