验证数组命令

Posted

技术标签:

【中文标题】验证数组命令【英文标题】:Validate array command 【发布时间】:2018-12-29 19:48:57 【问题描述】:

正如我提出的问题,我有这些命令可以正常工作但未经验证,这意味着如果我输入一个名称,它只会使记录无法验证该名称是否已存在于数组中。 这听起来很简单,但我尝试使用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!`);

【问题讨论】:

所以你想搜索一个对象列表来确定玩家当前是否正在被跟踪? 【参考方案1】:

你有一个对象数组

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")

.some 仅当数组中的所有元素在传递给回调函数时都返回 false 时才会返回 false。否则,它返回 true。

然后,我们可以在消息处理程序的开头附近添加以下行。

const isBeingTracked = list.some(obj => obj.name === args[0])

对于track 命令,您可以添加if(!isBeingTracked) /* ... */ ! 表示“不是”)。对于untrack 命令,您可以添加if(isBeingTracked) /* ... */ /* ... */ 是您将替换为实际代码的内容。

【讨论】:

以上是关于验证数组命令的主要内容,如果未能解决你的问题,请参考以下文章

larvarel常用命令

grails验证嵌套命令对象不起作用

如何从命令行验证我的 YAML 文件?

NET命令用不了,提示:不是内部或外部命令

Grails 命令对象自定义验证消息代码

Laravel MongoDB - 命令删除需要身份验证