繁体   English   中英

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

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

我是 Apps 脚本的新手,并试图比较两个 email 列表、来自谷歌联系人的电子邮件和来自谷歌表格的电子邮件(B 列),

我想从 Google 通讯录中删除未在 Google 表格中列出的电子邮件。 我从这里获得了部分代码并尝试对其进行修改以供我使用,但是,我停留在最后一部分以检测不在谷歌表中的 email,然后从谷歌联系人中删除它。 这是我可以汇总的内容,从 Google 联系人和 Google 表格中提取电子邮件效果很好。 运行以下代码不起作用,但我也没有收到任何错误。

编辑:我不确定从谷歌联系人中提取数据的代码的第一部分是否在一个数组中,因为每个 email 在使用 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()
    }
  });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM