2017-08-17 22 views
0

我有一个脚本,删除标签内的所有线程和所有sublabels.This是工作正常,但最近我得到一个错误,说该操作childrens[i].removeFromThreads(threads);不能适用于更多的100个线程...我该如何解决这个问题?使用.removeFromThreads在谷歌应用程序脚本中的100多个线程

function removingThreadsfromLabel() { 
    var parentlabelstring = 'THELabel'; 
    var parentlabel = GmailApp.getUserLabelByName(parentlabelstring); 
    var childrens = children(parentlabel); 

    for (var i = 0; i < childrens.length; i++){ 
    var threads = childrens[i].getThreads(); 
    childrens[i].removeFromThreads(threads); 
    } 
} 

function children(parent) { 
    var name = parent.getName() + '/'; 
    return GmailApp.getUserLabels().filter(function(label) { 
    return label.getName().slice(0, name.length) == name; 
    }); 
} 

现在我已经做了以下,但它并不是最佳...

function removingThreadsfromLabel() { 
    var parentlabelstring = 'THELabel'; 
    var parentlabel = GmailApp.getUserLabelByName(parentlabelstring); 
    var childrens = children(parentlabel); 

    for (var i = 0; i < childrens.length; i++){ 
    var threads = childrens[i].getThreads(); 
    Logger.log(threads.length); 
    while (threads.length>100){ 
     childrens[i].removeFromThread(threads[0]); 
     var threads = childrens[i].getThreads(); 
    } 
    childrens[i].removeFromThreads(threads); 
    } 
} 

问候,

回答

0

好吧,我知道如何做到这一点的批次,所以它是更好的,我的第一个解决方案:

function removingThreadsfromLabel() { 
    var batchSize = 100; 
    var parentlabelstring = 'THELabel'; 
    var parentlabel = GmailApp.getUserLabelByName(parentlabelstring); 
    var childrens = children(parentlabel); 

    for (var i = 0; i < childrens.length; i++){ 
    var threads = childrens[i].getThreads(); 
    Logger.log(threads.length); 
    for (var j = 0; j < threads.length; j+=batchSize) { 
     childrens[i].removeFromThreads(threads.slice(j, j+batchSize)); 
    } 
    var threads = childrens[i].getThreads(); 
    childrens[i].removeFromThreads(threads);  
    } 
+0

难道你的意思splice()?我不认为切片会改变原始数组。我会猜想可能拼接(0,批量); – Cooper

相关问题