首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么for循环不将变量作为值:

为什么for循环不将变量作为值:
EN

Stack Overflow用户
提问于 2017-03-05 22:01:56
回答 2查看 59关注 0票数 0

这个for循环确实有问题(我有问题吗?)

-Was使用GmailApp.getInboxThreads(k,max)k;但是这跳过了所有其他线程。(你能告诉我为什么吗?)

-Now --只有当k=0和max =100时才能工作。如果我尝试执行k=100和max =100,就会得到一组空白的数据。执行日志显示,对于k=100和max =100,完全跳过for循环。

谢谢你提前帮忙!

代码语言:javascript
运行
复制
function newEmailAddressList(){

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName("NewEmails");
 var range = sheet.getRange("A3:Q");
 var varRange = sheet.getRange("A2:G2");
 var addrA = [];



 range.clearContent(); //May need to change this to my delete function to speed things up.

 var contact = ContactsApp.getContacts();       //var contact = ContactsApp.getContacts();

 //////////

  for(var i = 0; i < contact.length; i++){      //for(var i = 0;i < contact.length;i++){

   //var addrA = [];                             //var addrA = []; This can't be here. It is not global or accessable if it is in this loop and the other global version doesn't access it apparently

   var addresses = contact[i].getEmails();     // var addresses = contact[i].getEmails();  

   for(var j = 0;j < addresses.length; j++){    //for(var j = 0;j < addresses.length;j++) {                           

      var address = addresses[j].getAddress();                //   s += addresses[j].getAddress() + br;

     addrA.push(address);                       //   
    }; 


}; /////////////////////AT THIS POINT CONTACTS ARRAY IS COMPLETE/////////////////////////

 var joinAddr = addrA.join();
 //var lowerAddr = joinAddr.toLowerCase();

 var startingEmail = sheet.getRange("C2").getValue();
 var numEmails = sheet.getRange("E2").getValue();

 var max = numEmails;



 for (var k = startingEmail; k<max; ++k){

 var threads = GmailApp.getInboxThreads()[k]; //get max threads starting at most recent thread
 var messages = threads.getMessages()[0];

       var sndr; 
       var rcpnt;
       var srAry = [];



       var sndr = messages.getFrom().replace(/^.+<([^>]+)>$/, "$1"); //http://stackoverflow.com/questions/26242591/is-there-a-way-to-get-the-specific-email-address-from-a-gmail-message-object-in      
       var sndrLower = sndr.toLowerCase;

       var rcpnt = messages.getTo().replace(/^.+<([^>]+)>$/, "$1");
       var rcpntLower = rcpnt.toLowerCase;

       var cc = messages.getCc().replace(/^.+<([^>]+)>$/, "$1");
       var ccLower = cc.toLowerCase;

       //srAry.push(sndr);
       //srAry.push(rcpnt);
       //srAry.push(cc);



    var isIn = joinAddr.search(sndr || rcpnt);

     if(isIn == -1){

      var instance = k;
      var dat = messages.getDate();
      //var sndr = messages.getFrom();
      //var rcpnt = messages.getTo();
      var sub = messages.getSubject();
      var msg = messages.getPlainBody();


      var info = [instance,dat,sndr,rcpnt,cc,sub,msg];

       sheet.appendRow(info); //appendRow only works with sheet class not range class



};//else{ break;  };

};

//Browser.msgBox(("Here are your New Contacts from Emails "k" through "k + max"!"));

getContactGroups();

};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-05 22:37:04

我认为您在如何使用Gmail或如何运行for循环方面存在问题。

关于您的第一个问题,请查看Gmail API文档

您可以使用:

代码语言:javascript
运行
复制
getInboxThreads()
//OR 
getInboxThreads(start, max)
// Where start if the index of the first of thread and max is the maximum number of thread retrieved

所以当你这么做的时候: GmailApp.getInboxThreads(k,max)k;

检索范围为K到最大值的一个元素K

要获得所有线程,

代码语言:javascript
运行
复制
var threads = GmailApp.getInboxThreads();
//OR
var threads = GmailApp.getInboxThreads(k, max);
//Where K is starting email and max maximum number of thread

您的循环必须从零开始,因为您正在处理上下文GmailApp之外的数组。因此:

代码语言:javascript
运行
复制
var threads = GmailApp.getInboxThreads(k, max);
//threads is an array of threads range from 0 to max?
//Don't use k again!
for(var i=0; i<threads.length;i++){
 var currentThread = threads[i];
 //do what you need with the thread
}
票数 0
EN

Stack Overflow用户

发布于 2017-03-05 22:29:03

注意,for循环严格等于while循环:

代码语言:javascript
运行
复制
//for (/*Init*/; /*Cond*/; /*Step*/) { /*Action*/ }
//stricty equal to :
/*Init*/;
while (/*Cond*/) {
    /*Action*/;
    /*Step*/;
}

因为k= max = 100,所以k < max返回false,所以您不会在循环中输入。如果要保持k= max = 100,则应该使用k <= max (小于或等于)或do-循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42614605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档