比较两个数组并删除不在其他数组中的数据

compare two arrays and delete data that is not in other array

我是 Apps 脚本的新手,正在尝试比较两个电子邮件列表, 来自 google 个联系人的电子邮件 以及来自 google sheet(B 列),

的电子邮件

我想从 Google 个未在 google sheet 中列出的联系人中删除 email/s。 我从 获得了部分代码并尝试修改它以供我使用,但是,我停留在最后一部分以检测不在 google sheet 中的电子邮件,然后将其删除来自 google 联系人。 这是我可以放在一起的内容,从 Google 联系人和 Google sheet 中提取电子邮件效果很好。 运行 下面的代码不起作用,但我也没有收到任何错误。

已编辑:我不确定从 google 联系人中提取数据的代码的第一部分是否在一个数组中,因为每封电子邮件在使用时都是这样打印的 console.log:[email1@ email.com]

感谢您的帮助,让它发挥作用。

function deleteContacts() {
 var contactEmails = ContactsApp.getContacts().map(function(contact) {
   return contact.getEmailAddresses();
        //console.log("Google Emails:" + contactEmails);

 var sheet = SpreadsheetApp.getActive().getSheetByName("sheet2"); 
 var ColEmails = sheet.getRange('B2:B').getValues().map(function(value) {
   return value[0];
 }).filter(function(val) {
   return val != "";
 })
        //console.log("Sheet Emails:" + ColEmails);
 
for (var i = 0; i < contactEmails.length; i++) {
   if (ColEmails.indexOf(contactEmails[i]) == -1) {
     var contact = ContactsApp.getContactsByEmailAddress(contactEmails[i]);
     ContactsApp.deleteContact(contact);
   }
 }
});
}

尝试:

function deleteContacts() {
  const ss=SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("sheet2");
  const rg = sh.getRange(2,2,sh.getLastRow()-1,1);
  const vs = rg.getValues().flat();
  const emails = ContactsApp.getContacts().map(function (contact) {return contact.getEmailAddresses();}).flat();
  emails.forEach(e=>{
    if(!~vs.indexOf(e)) {
      ContactsApp.getContact(e).deleteContact()
    }
  });
}