迭代器

当遇到下列情况时,迭代器是一种用于遍历对象列表的常见编程模式:

  • 一开始可能并不知道列表的大小。
  • 将整个列表一次性加载到内存可能导致太耗资源。

迭代器会公开两种方法:boolean hasNext()Object next()。AdWords 脚本使用迭代器模式来抓取 AdWords 实体。

从功能方面来看,迭代器与常规数组的区别不大,并且可以使您的代码更加简练。请对比以下两段代码。第一段代码遍历数组:

for (var i = 0; i < myArray.length; i++) {
  var myObject = myArray[i];
}
第二段代码遍历迭代器:
while (myIterator.hasNext()) {
  var myObject = myIterator.next();
}

下列代码展示了如何针对您帐户中的所有广告系列使用迭代器:

var campaignIterator = AdWordsApp.campaigns().get();

while (campaignIterator.hasNext()) {
  var campaign = campaignIterator.next();
  Logger.log(campaign.getName() +
      "; active? " + campaign.isEnabled() +
      "; budget=" + campaign.getBudget());
}

在 AdWords 脚本中,实体迭代器通常被限制为仅抓取前 5 万个实体(有关详情,请参阅限制)。但是,调用 iterator.totalNumEntities() 就可以了解迭代器应该可以抓取的实体总数。这项功能在拆分工作时非常有用。例如:

var keywords = campaign.keywords()
    .withCondition("Ctr > 0.01")
    .forDateRange("YESTERDAY")
    .get();
// Did we fetch more keywords than we can handle?
if (keywords.totalNumEntities() > 50000) {
    // Adjust the condition to fetch fewer keywords.
    keywords = campaign.keywords()
      .withCondition("Ctr > 0.015")
      .forDateRange("YESTERDAY")
      .get();
}

对选择器应用 withLimit() 不会改变 totalNumEntities() 的值。下列代码段中的 xy 的值相同:

var x = AdWordsApp.keywords().get().totalNumEntities();
var y = AdWordsApp.keywords().withLimit(5).get().totalNumEntities();

要获取 AdWords 实体迭代器,您必须先构建一个选择器

发送以下问题的反馈:

此网页
AdWords Scripts
AdWords Scripts
需要帮助?请访问我们的支持页面