Почему indexOf () не возвращает местоположение адреса электронной почты в массиве? - PullRequest
1 голос
/ 03 ноября 2019

У меня есть массив адресов электронной почты, которые я получил с помощью .getViewers () из моего листа. Это дает мне массив

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

Примечание. Xxxxxxx заменяет конфиденциальную информацию

Я пытаюсь удалить из этого массива следующее, а затем отправить электронное письмо на оставшиеся адреса электронной почты.

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

Результаты индекса всегда возвращаются как -1 (совпадение не найдено).

Я новичок в кодировании, поэтому уверен, что это простое исправление, о котором я просто не знаю. Я попытался поместить свой поисковый термин в «одинарные» кавычки, в «двойные» кавычки и вообще без кавычек. Я попытался присвоить его переменной, а затем использовать переменную в indexOf (переменная). Я смотрел 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');

Результаты, которые я получаю из журнала:

  • index = -1.0
  • index = -1.0
  • string = xxxxxjrhigh @ xxxxxxx.org, / hd / domain / xxxxxxx.org, testemail3 @ googlemail.com, testemail2 @ gmail.com

Что я ожидаю получить:

  • index = 0
  • index = 1
  • string = testemail3 @ googlemail.com, testemail2 @gmail.com

Ответы [ 2 ]

4 голосов
/ 03 ноября 2019

Вы можете взглянуть на то, что возвращает вызов getViewers() здесь: https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet.html#getviewers. Это не массив строк, а массив User объектов, каждый из которых имеет метод getEmail(),Причина, по которой ваш indexOf() возвращает -1 для каждого письма, заключается в том, что вы не работаете с массивом простых строк здесь!

Чтобы удалить двух пользователей из массива на основе их электронной почты, вы можете сделать что-то вродеthis:

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

Где email1 и email2 - электронные письма пользователей, которых вы не хотите иметь в своем результирующем массиве.

0 голосов
/ 03 ноября 2019

Спасибо, @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, и она будет работать независимо от того, в каком порядке находятся учетные записи электронной почтыдюйма

Спасибо!

...