【问题标题】:(Discord.js) arr.indexOf is not a function, how do I fix this?(Discord.js) array.indexOf 不是一个函数,我该如何解决这个问题?
【发布时间】:2021-04-13 13:09:04
【问题描述】:

我正在尝试编写一个包含多个功能的 Discord 机器人。与此问题相关的主要命令是向数组添加数字的命令,以及从数组中删除数字的命令(前提是该数字存在)。虽然我已经完成了一个有效的“AddNumber”命令,但我的主要问题在于“RemoveNumber”代码。我正在使用arr.indexOf 函数来确定它当前是否存在于数组中。但是,每当我尝试该功能时,都会收到错误消息:UnhandledPromiseRejectionWarning: TypeError: arr.indexOf is not a function。虽然我在网上找到了几个解决方案,并尝试了其中的大部分,但没有一个有帮助。我怎样才能解决这个问题?或者,还有其他方法可以检查吗?

相关代码(如有需要可提供更多!):

// Main File (Where the array is made, passed to needed files using async)
const arr = [
    "1",
];
// End main file
// Command File
if(arr.indexOf(gametoend) === -1){
    message.reply('that game doesn\'t exist! Did you put in the wrong number?');
} else {
    message.channel.send('Placeholder success');
}
// End command file

更新:这是弹出的完整错误文本。对于这个问题,我将数组名称从 inprogressgames 更改为 arr,但此处并非如此,因此名称不同。 Image link

更新 2:将代码放入 pastebin,希望对您有所帮助。 Link

【问题讨论】:

  • 上传数组的声明
  • 你提供了错误的代码 ^^ 你的错误是inprogressgames.indexOf,而你提供了arr.indexOf。请显示发生错误的代码段
  • 您提供的代码不会产生该错误。
  • 如果没有完整的代码,我们没有什么可做的,但错误意味着在某些时候arr 不是array,因此方法indexOf 将不起作用。找出 arr 何时不是数组,您将解决问题。

标签: javascript arrays discord.js


【解决方案1】:

查看粘贴箱中的代码,我可以看到arr 不是Array。这是因为您调用execute 命令的方式:

await command.execute(message, args, client, arr)

execute 命令的签名只需要 3 个参数:

async execute(message, args, arr) {

因此,arr 实际上是不和谐的client。从调用 execute 时指定的参数列表中删除 client 或将其添加到 execute 所需的参数列表中。

您可以在执行 indexOf 之前通过 console.loging arr 验证这一点

我在调试时遇到了另一个小问题,即稍后您尝试从 array 中删除时。 Array.remove 不存在,所以我建议使用 Array.slice 之类的东西

【讨论】:

  • 客户端参数在我的代码的另一部分中是必不可少的 - 我将如何改进此代码以便可以使用 3 个以上的参数?
  • 将其添加到执行命令采用的参数列表中:async execute(message, args, client, arr) {
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 2019-02-08
  • 1970-01-01
  • 2020-03-25
  • 2020-02-14
相关资源
最近更新 更多