Javascript 为什么indexOf()不返回数组中电子邮件地址的位置?

Javascript 为什么indexOf()不返回数组中电子邮件地址的位置?,javascript,google-apps-script,google-sheets,indexof,Javascript,Google Apps Script,Google Sheets,Indexof,我有一组电子邮件地址,这些地址是我从工作表中使用.getViewers获得的。这给了我一系列的 [xxxxxjrhigh@xxxxxxx.org,/hd/domain/xxxxxxx.org,testemail3@googlemail.com, testemail2@gmail.com, testemail1@gmail.com] 注:xxxxxxx替换敏感信息 我正在尝试从该阵列中删除以下内容,然后向剩余的电子邮件地址发送电子邮件 xxxxxjrhigh@xxxxxxx.org-和-/hd/d

我有一组电子邮件地址,这些地址是我从工作表中使用.getViewers获得的。这给了我一系列的

[xxxxxjrhigh@xxxxxxx.org,/hd/domain/xxxxxxx.org,testemail3@googlemail.com, testemail2@gmail.com, testemail1@gmail.com]

注:xxxxxxx替换敏感信息

我正在尝试从该阵列中删除以下内容,然后向剩余的电子邮件地址发送电子邮件

xxxxxjrhigh@xxxxxxx.org-和-/hd/domain/xxxxxxx.org

索引结果始终返回为-1,未找到匹配项

我是一个新的编码,所以我相信这是一个简单的修复,我只是不知道。我试着把我的搜索词放在单引号、双引号和不加引号中。我尝试将其分配给一个变量,然后在indexOfvariable中使用该变量。我看了3个关于使用indexOf的不同教程,这些教程并不表示我会遇到任何问题

var viewers = SpreadsheetApp.getActiveSpreadsheet().getViewers();
  Logger.log(viewers);

  var index = viewers.indexOf('/hd/domain/xxxxxxx.org');
  Logger.log(index);

  viewers.splice( index, 1);
  Logger.log(viewers);

  var index = viewers.indexOf('xxxxxjrhigh@xxxxxxx.org');
  Logger.log(index);

  viewers.splice( index, 1);
  Logger.log(viewers);

  var string = ""+viewers;
  Logger.log(string);


  GmailApp.sendEmail(string, 'Test Treacker', 'This is the outcome from the test tracker');
我从日志中得到的结果:

指数=-1.0 指数=-1.0 字符串=xxxxxjrhigh@xxxxxxx.org,/hd/domain/xxxxxxx.org,testemail3@googlemail.com,testemail2@gmail.com 我期望得到的是:

索引=0 索引=1
字符串=testemail3@googlemail.com,testemail2@gmail.com您可以在此处查看GetViewer调用的返回:。它不是一个字符串数组,而是一个用户对象数组,每个用户对象都有一个getEmail方法。indexOf为每封电子邮件返回-1的原因是,这里没有使用简单字符串数组

要根据电子邮件从阵列中删除两个用户,您可以执行以下操作:

const viewers = SpreadsheetApp.getActiveSpreadsheet().getViewers();
const filteredViewers = viewers.filter(viewer =>
    viewer.getEmail() !== 'email1' && viewer.getEmail() !== 'email2');

其中,email1和email2是您不希望在结果数组中包含的用户的电子邮件。

您可以在此处查看GetViewer调用的返回内容:。它不是一个字符串数组,而是一个用户对象数组,每个用户对象都有一个getEmail方法。indexOf为每封电子邮件返回-1的原因是,这里没有使用简单字符串数组

要根据电子邮件从阵列中删除两个用户,您可以执行以下操作:

const viewers = SpreadsheetApp.getActiveSpreadsheet().getViewers();
const filteredViewers = viewers.filter(viewer =>
    viewer.getEmail() !== 'email1' && viewer.getEmail() !== 'email2');

其中,email1和email2是您不希望在结果数组中包含的用户的电子邮件。

感谢@ajobi为我指明了正确的方向。虽然由于奇怪的语法错误,您的代码对我没有帮助,但您发现我的查看器数组中的项目中有帐户而不是实际的电子邮件地址,这让我思考并做了更多的研究。我偶然发现了一个适合我的答案

我将帐户数组映射为实际电子邮件地址数组。这就是我想到的

function correctEmails() {

 var viewers = SpreadsheetApp.getActiveSpreadsheet().getViewers();
 Logger.log(viewers);

 var viewers1 = viewers.map(getEmails);

 Logger.log(viewers1);

 var index = viewers1.indexOf('/hd/domain/xxxxxxx.org');
 Logger.log(index);

 viewers1.splice( index, 1);
 Logger.log(viewers1);

 var index = viewers1.indexOf('xxxxxjrhigh@xxxxxxx.org');
 Logger.log(index);

 viewers1.splice( index, 1);
 Logger.log(viewers1);

 var string = ""+viewers1;
 Logger.log(string+" - string");


//  GmailApp.sendEmail(string, 'Test Treacker', 'This is the outcome from the test tracker');
//  

}

function getEmails(item) {
 return item.getEmail();
}
这就产生了我一直在寻找的字符串testemail3@googlemail.com,testemail2@gmail.com无论电子邮件帐户的顺序如何,它都能工作


谢谢

谢谢@ajobi为我指明了正确的方向。虽然由于奇怪的语法错误,您的代码对我没有帮助,但您发现我的查看器数组中的项目中有帐户而不是实际的电子邮件地址,这让我思考并做了更多的研究。我偶然发现了一个适合我的答案

我将帐户数组映射为实际电子邮件地址数组。这就是我想到的

function correctEmails() {

 var viewers = SpreadsheetApp.getActiveSpreadsheet().getViewers();
 Logger.log(viewers);

 var viewers1 = viewers.map(getEmails);

 Logger.log(viewers1);

 var index = viewers1.indexOf('/hd/domain/xxxxxxx.org');
 Logger.log(index);

 viewers1.splice( index, 1);
 Logger.log(viewers1);

 var index = viewers1.indexOf('xxxxxjrhigh@xxxxxxx.org');
 Logger.log(index);

 viewers1.splice( index, 1);
 Logger.log(viewers1);

 var string = ""+viewers1;
 Logger.log(string+" - string");


//  GmailApp.sendEmail(string, 'Test Treacker', 'This is the outcome from the test tracker');
//  

}

function getEmails(item) {
 return item.getEmail();
}
这就产生了我一直在寻找的字符串testemail3@googlemail.com,testemail2@gmail.com无论电子邮件帐户的顺序如何,它都能工作


谢谢

您正在搜索的值:/hd/domain/xxxxx.org和xxxxxjrhigh@xxxxxxx.org与数组中的值不匹配:/hd/domain/xxxxxxx.org更多x和xxxxxjrhigh@questac.orgquestac,而不是XXXXXX xxxxx只是为了取代敏感信息。实际上,我甚至没有数我放在里面的x的数目。我保证在原始代码中,搜索的项与数组中的项完全匹配。我知道这一点,因为我实际上是通过从数组日志中复制/粘贴它们来将它们添加到代码中的。谢谢你,尼克。我把它们改了,这样它们现在就匹配了。这是一个很好的观点。如果这不是字符串中的输入错误,我只能想象,当你试图找到这些索引时,也许你还没有得到你的数据,尽管我对谷歌表单一无所知。索引和拼接的查找似乎应该按照您的预期工作。请用此替换您的indexOf/splice逻辑,然后查看它是否工作:const string=viewers.filter viewer=>/.com$/.test viewer.join;如果将查看器设置为[xxxxxjrhigh@xxxxx.org,/hd/domain/xxxxx.org,testemail3@googlemail.com,testemail2@gmail.com.split“,”;,并在列表中查找电子邮件地址的索引,代码会找到这些地址并将其从数组中删除。请尝试创建一个精简版本,在帖子中重现问题。您正在搜索的值:/hd/domain/xxxxx.org和 xxxxxjrhigh@xxxxxxx.org与arra中的值不匹配

y:/hd/domain/xxxxxxx.org更多x和xxxxxjrhigh@questac.orgquestac,而不是XXXXXX xxxxx只是为了取代敏感信息。实际上,我甚至没有数我放在里面的x的数目。我保证在原始代码中,搜索的项与数组中的项完全匹配。我知道这一点,因为我实际上是通过从数组日志中复制/粘贴它们来将它们添加到代码中的。谢谢你,尼克。我把它们改了,这样它们现在就匹配了。这是一个很好的观点。如果这不是字符串中的输入错误,我只能想象,当你试图找到这些索引时,也许你还没有得到你的数据,尽管我对谷歌表单一无所知。索引和拼接的查找似乎应该按照您的预期工作。请用此替换您的indexOf/splice逻辑,然后查看它是否工作:const string=viewers.filter viewer=>/.com$/.test viewer.join;如果将查看器设置为[xxxxxjrhigh@xxxxx.org,/hd/domain/xxxxx.org,testemail3@googlemail.com,testemail2@gmail.com.split“,”;,并在列表中查找电子邮件地址的索引,代码会找到这些地址并将其从数组中删除。请尝试创建一个精简版本,在帖子本身中重现问题。语法错误是否说明了任何特定的内容?const不应'这里没有任何问题,但是如果您愿意,您可以安全地用var替换它们。它没有说任何具体的内容,但是我将const和var都更改为var,并且仍然在这一行中出现语法错误:var filteredViewers=viewers.filterviewer=>viewer.getEmail!='xxxxxjrhigh@xxxxxxx.org1'&&viewer.getEmail!='/hd/domain/xxxxxxx.org';代码使用ar仅从ES6以上版本可用的行函数。请尝试用以下代码替换该行:var filteredViewers=viewers.filterfunctionviewer{return viewer.getEmail!=='email1'&&viewer.getEmail!=='email2';};@ajobi筛选器可用。=>不可用。语法错误是否表示任何特定的内容?const应该不会在此处造成任何问题,但如果您愿意,您可以安全地将它们替换为var。它没有表示任何特定的内容,但我将const和var都更改为var,并且仍然在这一行上出现语法错误:var filteredViewers=viewers.filterveewer=>viewer.getEmail!=='xxxxxjrhigh@xxxxxxx.org1“&&viewer.getEmail!=”/hd/domain/xxxxxxx.org“;该代码使用仅从ES6向上提供的箭头函数。请尝试用以下代码替换该行:var filteredViewers=viewer.filterfunctionviewer{return viewer.getEmail!='email1'&&viewer.getEmail!='email2';};@ajobi筛选器可用。=>不可用。祝贺您成功。我今天注意到您的回答是独立的,如果您认为我的回答帮助您解决了问题,请不要忘记将其标记为正确答案!=您的回答实际上不正确,因为有某种语法错误我无法解决,但我确定ly up投票支持你!感谢你为我指出了正确的方向,这样我就可以找到一个有效的答案。你帮了我很大的忙,但是如果我把它标记为正确,它就不起作用了,我会失去声誉…你明白。另外,代码是完全有效的,只是它使用了ES6语法。你的语法错误可能是由你的IDE w引起的这不是为了识别ES6而设置的。当然,仅仅从问题的内容来看,这是很难预见的。你可以看看这里:为了更好地理解ES6是关于什么的。具体来说,你可以滚动到箭头函数部分-这就是我在代码示例中使用的。祝贺你让它工作起来,我注意到今天你回答了一个独立的答案,如果你认为我的答案帮助你解决了这个问题,别忘了把它标记为正确的答案!=你的答案实际上并不正确,因为有某种语法错误我无法解决,但我肯定投了你的票!谢谢你给我指出了正确的方向,这样我就可以找到一个正确的答案答案是正确的。你帮了我很大的忙,但是如果我把它标记为正确的,但它不起作用,我会失去声誉…你明白。而且,代码是完全有效的,只是它使用了ES6语法。你的语法错误可能是由你的IDE没有设置为识别ES6造成的。这是很难预测的当然是问题的内容。你可以看看这里:为了更好地理解ES6的全部内容。具体来说,你可以滚动到箭头函数部分——这就是我在代码示例中使用的部分。