Google Apps脚本deleteCompanyField()

问题描述 投票:2回答:2

我正在尝试删除Google联系人中的所有公司/标题。以下代码删除除一个以外的所有内容。有人可以帮忙吗?

for (var i = 0; i < noComps; i++) {
 var cComp = contacts.getCompanies()[i];
 var r = cComp.deleteCompanyField();
}

我的contacts变量和noComps已经预定义,这里没有概述。

基本上我要做的是在Google表格中直接更新,并将其同步到Google通讯录。我建立了onEdit(e)功能。

google-apps-script google-contacts
2个回答
1
投票

您的代码需要按以下方式构建:

function test() {
  var contacts = ContactsApp.getContactsByName('John Doe');

  var companies,i,j,L,nmbrOfCompanies,thisCompany;

  L = contacts.length;

  for (i = 0; i < L; i++) {
    companies = contacts[i].getCompanies();

    nmbrOfCompanies = companies.length;

    for (j = 0; j < nmbrOfCompanies; j++) {
      thisCompany = companies[j];
      //Logger.log('thisCompany: ' + thisCompany);
      thisCompany.deleteCompanyField();
    }
  }

}

每个联系人可以有多个公司。所以,你需要一个嵌套循环。


1
投票

你有一个简单的变异+迭代问题:在你的联系公司的循环中,你要求他们的公司。但是,您删除了一个条目,因此下一个调用将跳过下一个公司。相反,您应该向后迭代,并避免重新获取循环中的迭代对象:

var comps = contact.getCompanies();
var i = comps.length;
while (i > 0) {
  var comp = comps[--i];
  ...
  comp.deleteCompanyField();
}

另一种方法是使用forEach数组函数:

contact.getCompanies().forEach(function (comp, i, allTheirCompanies) {
  ...
  comp.deleteCompanyField();
});
© www.soinside.com 2019 - 2024. All rights reserved.