2017-08-17 32 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

相關問題