【问题标题】:Array from GroupsApp and then indexOf fails [duplicate]GroupsApp 中的数组,然后 indexOf 失败 [重复]
【发布时间】:2021-12-09 08:35:17
【问题描述】:

我正在尝试使用 Google Apps 脚本获取 Google 群组中的人员列表。我做了一个代码(如下),但结果出乎意料。我认为与项目的格式有关,但不确定。在我的代码中,我测试了许多日志来检查。

为什么“indexOf”不能正确检测到电子邮件?因为 -1.00 作为答案是错误的。

信息: getUsers() User[] 检索具有已知相应 Google 帐户的组的直接成员。

我认为当我用“”询问时 indexOf 回答 -1.00 并且当我用数组的位置正确回答时回答是奇怪的。

如果有人在此组内(在循环内),我需要签入脚本。

function CheckingSomeFromGroup() {
  var members = GroupsApp.getGroupByEmail("members@company").getUsers();

  Logger.log(members); //it shows an array in the log
  Logger.log(members[0]); //it shows the first element form that array which is "Jorge@company.com"
  Logger.log(members.indexOf("Jorge@company.com") //i was expecting a number different than -1.00 because jorge exists but in the log appear -1.00 which is wrong
  Logger.log(members.indexOf(members[0]); //it shows 0 correctly becuase Jorge is in the first place of the array
  Logger.log(members.length);//it shows number 3 which is ok since i have 3 people in the group

}

【问题讨论】:

  • members 是一个对象。使用.findIndex(e =>e.getEmail()==='Jorge@company.com')
  • @TheMaster 惊人的答案!效果惊人!真的谢谢!

标签: javascript google-apps-script google-developers-console google-groups-api


【解决方案1】:

membersUser 对象的数组,而不是字符串。所以你不能只通过电子邮件/字符串找到它。您会在记录器中看到电子邮件,因为它可能有一个 toString 方法来输出它。

您可以循环访问members 并致电User.getEmail() 以获取电子邮件并相应地工作。

function CheckingSomeFromGroup() {

    var emails = ['abc@example.com'];//get 1-D array of string emails from your column accordingly

    var members = GroupsApp.getGroupByEmail("members@company").getUsers();

    for (var i = 0; i < members.length; i++) {
        var memberEmail = members[i].getEmail();

        if (emails.indexOf(memberEmail) !== -1) {
//exists
        }

    }

}

【讨论】:

  • 哦,太好了。但是为什么 indexOf(members[0]) 可以完美运行?我在 Google 表格中有一个包含大量电子邮件的列,我需要检查每封电子邮件是否在该组中(带有循环)。在这种情况下我该如何使用 indexOf?
  • 因为 members[0] 仍然是用户对象,而不是字符串。我已经编辑了如何获取用户电子邮件的答案。如果您登录members[0].getEmail(),您将获得电子邮件字符串值。所以你可以循环执行members[i].getEmail()
  • 那我必须做2个循环吗? 1 循环检查我阵列中的每封电子邮件,另一个循环以 1by1 的方式在此 Objet 中与电子邮件组一起使用?有没有办法将成员对象转换为数组?然后我可以忘记第二个循环并使用 indexof。
  • 不一定。如果您可以获得要比较的电子邮件列表,那么您可以执行更新的答案代码之类的操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2023-03-31
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多