为什么我用于检查用户名是否在数组中的函数返回 'false' 而用户名是?

Why is my function for checking if a username is in an array returning 'false' when the username is?

我目前正在开发 Twitch 聊天机器人,我正在尝试 实现一个功能,该功能将查看用户是否是聊天中的 moderator 或全局 moderator。如果用户是,该函数应该 return true 频道中的 moderator 或代码中的全局 moderator。 否则,return 为假。全局 mod 运算符数组是 ['toximixes', 'lucidzbot'].

到目前为止,检查用户是否是 moderator 对我来说工作正常 使用(tmi.js),但查看用户名是否存在于全局 moderators 数组由于某种原因无法正常工作。

这是我当前使用的函数:

function isMod(user) {
  if (user.mod == true) {
    return true;
  } else {
    chnls.forEach(function(val,i){
      if (val == user.username) {
        return true;
      }
    });
  }

  return false;
}

该函数接受一个参数,即用户状态对象 发送消息时由 tmi.js 提供,但为了简单和 调试目的我正在使用这 3 个对象:

{
username:"demo",
mod: false
}, // should be false
{
username:"demo-2",
mod: true
}, // should be true
{
username:"toximixes",
mod: false
} // should be true

前两个对象完美运行,但出于某种原因,第三个 对象保持为假。这是一个问题,因为 tmi.js 没有 将广播者(在这种情况下是我)视为 mod,所以当 我在聊天中 运行 命令,我的帐户显示为 mod:false.

如果发生这种情况,函数是应该检查我的用户名 针对全局 moderators 数组,如果找到匹配项, return 是的。但是,出于某种原因,它是 returning false 并且没有错误 在控制台或聊天中为我显示。

这是我尝试过的方法:

  1. 在数组上使用 for i++ 循环,并检查当前项 针对用户名;
  2. 在数组上使用 for-in 循环,并根据用户名检查项目,两者都严格相等 (===) 然后尝试另一个 (==);
  3. 使用数组的 forEach 根据用户名检查每个项目;
  4. 再次使用 forEach 查看项目 includes 是否完全是用户名

但到目前为止 none 我正在尝试的是有效的。尽管我拥有一切 聊天中的权限,功能 - 以及整个 bot -- 对待我几乎和普通观众一样。

事实上,这不仅发生在我的用户名上,函数也发生了 这适用于每个非 Twitch-mod 即使它们应该是 全局-mod。这是怎么回事?我该如何解决这个问题?

试试这个:

function isMod(user) {
  if (user.mod == true) {
    return true;
  } else {
    return chnls.some(function(val){
      return val == user.username;
    });
  }
}

您可能需要 Array.prototype.some

的 pollyfil

您实际上不需要遍历数组。 Array.prototype.includes() 工作正常。

试试这个:

function isMod(user) {
  if (user.mod == true) {
    return true;
  } else if (chnls.includes(user.username)) {
    return true
  }

  return false;
}