簡體   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