为了账号安全,请及时绑定邮箱和手机立即绑定

在 的循环中循环

在 的循环中循环

翻翻过去那场雪 2022-08-18 09:48:40
我正在处理一个代码,我有一个问题:与 的循环不适用于 while。这意味着在 i = 0 运行后,执行脚本,然后代码停止。期望:代码可以在 i= 0,1,2,3 的情况下连续运行,依此类推。那么我怎么能修改代码以这种方式工作,请帮助,非常感谢。function FOLDER_SCAN_ONLY() {  // List folders inside the folder    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("scan_results")  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("folder_to_scan");  var startRow = 2;  var numRows = sheet.getLastRow();  var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());  var data = dataRange.getValues();  for (var i = 0; i in data; i++) {    var rowData = data[i];    if (!rowData[1]) continue;    if (rowData[2] != 'OK') continue;    if (rowData[3] != '') continue;    var folder_id = rowData[1];    var parent = DriveApp.getFolderById(folder_id)    var childFolders = parent.getFolders();    while (childFolders.hasNext()) {      var childFolder = childFolders.next()      var data = [        childFolder.getName(),        childFolder.getUrl(),        childFolder.getId(),        childFolder.getParents().next().getName()      ];      // Write      ss.appendRow(data)      sheet.getRange(2 + i, 4).setValue('done')    }  }}
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

while 循环仅在条件为 true 时运行,但它将从 for 循环的每个周期至少检查一次。如果您希望它每次都运行,则可以将其更改为 do while 循环。我不完全确定你想完成什么,但你绝对可以在for循环中放置一个while循环。


for(let i = 0; i < 5; i++){

  console.log('Starting a cycle');

  let bool = true;

  let value = 0;

  while(bool){

    console.log('While loop');

    if(value === 3){

      bool = false;

    } else {

      value += 1;

    }

  }

}

当执行时,这将为您提供一个示例 -


Starting a cycle

While loop

While loop

While loop

While loop

Starting a cycle

While loop

While loop

While loop

While loop

Starting a cycle

While loop

While loop

While loop

While loop

Starting a cycle

While loop

While loop

While loop

While loop

Starting a cycle

While loop

While loop

While loop

While loop

因此,如您所见,while 循环将运行 for 循环的每个周期 - 假设它的条件为 true。如果条件在第一个 while 循环中变为 false,但再也不会变为 true,则在 for 循环的所有未来周期中,将跳过 while 循环。


例如,如果我们稍微更改代码.


let bool = true;

for(let i = 0; i < 5; i++){

  console.log('Starting a cycle');

  let value = 0;

  while(bool){

    console.log('While loop');

    if(value === 3){

      bool = false;

    } else {

      value += 1;

    }

  }

在本例中,我们为 while 循环设置了一次条件,但从未将其更改回默认值。现在我们得到...


Starting a cycle

While loop

While loop

While loop

While loop

Starting a cycle

Starting a cycle

Starting a cycle

Starting a cycle


查看完整回答
反对 回复 2022-08-18
?
互换的青春

TA贡献1797条经验 获得超6个赞

您可以使用这两个循环,它们的行为可能与预期不同。




function forWhileLoop(){

for (let i=0; i < data.length; i++){

  loop = true

  console.log(`processing: ${i}`)

  while (loop == true){

    console.log(`loop is ${loop}`)

    loop = false

    console.log(`loop is ${loop}`)

  }

  }

  console.log('all done')

}


forWhileLoop()


// Results in 


processing: 0

loop is true

loop is false

processing: 1

loop is true

loop is false

processing: 2

loop is true

loop is false

processing: 3

loop is true

loop is false

processing: 4

loop is true

loop is false

processing: 5

loop is true

loop is false

processing: 6

loop is true

loop is false

processing: 7

loop is true

loop is false

processing: 8

loop is true

loop is false

processing: 9

loop is true

loop is false

all done


https://repl.it/repls/EnormousNegligibleTechnology


查看完整回答
反对 回复 2022-08-18
  • 2 回答
  • 0 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信