如何解决比较两个数组并删除不在其他数组中的数据
我是 Apps 脚本的新手,正在尝试比较两个电子邮件列表, 来自谷歌联系人的电子邮件 以及来自 Google 表格的电子邮件(B 列),
我想从 Google 通讯录中删除未在 Google 表格中列出的电子邮件。 我从 here 获得了部分代码并试图修改它以供我使用,但是,我坚持在最后一部分检测不在谷歌表格中的电子邮件,然后从谷歌联系人中删除它。 这是我可以放在一起的内容,从 Google 联系人和 Google 工作表中提取电子邮件工作正常。 运行以下代码不起作用,但我也没有收到任何错误。
编辑:我不确定从 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()
}
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。