gpt4 book ai didi

javascript - 除最外层循环外,多个循环都有效

转载 作者:行者123 更新时间:2023-12-01 02:52:40 25 4
gpt4 key购买 nike

我有一个执行以下操作的脚本。

最内层到最外层:

  1. 迭代每个对象属性。 (对于in)!

    for (var j in jsobj) {  
    var headerRow = Object.keys(jsobj).sort();
    var row = headerRow.map(function(key){ return jsobj[key]});
    var contents = [row];
    var headers = [headerRow];
    sheets[counter].getRange(1+i, 1, contents.length, headerRow.length ).setValues(contents);
    }
  2. 迭代包含对象的每一列

      for (var i=0; i < col-5; i++) {  
    var json = sheet.getRange(arr[m-1],i+6).getValue(); //First value should be row position from VLOOKUP.
    var jsobj = JSON.parse(json);

现在,我想运行另一个循环,var m 是一个变化的值,因此应该给出不同的结果。

for (var m=item; m > 0; m--) {

counter++

我有一个封闭循环,它将生成“m”的值数组。

var arr = []; 
for (var y = 0; y < folios.length; y++) {
if(folios[y] == name){
arr.push(y);

}
}

前两个最里面的循环按预期工作,但是我似乎无法让它为外部循环工作。我将提供电子表格的副本和下面的完整代码:

function createTable() {

var doc = SpreadsheetApp.openById("1Jv3E51r5zMuMLmn0qkCRjQBBRJHK_QTSdOeCSLRG7Do");

var sheet = doc.getSheetByName("json");
var sheet2 = doc.getSheetByName("tabla de frecuencias");
var sheet7 = doc.getSheetByName("tf2");




//Variable framework
var prelast = sheet.getRange("A1:A").getValues();
var last = prelast.filter(String).length;
var folio = sheet.getRange(last,3).getValue();
var folios = sheet.getRange("D1:D").getValues();
var range = sheet.getRange("C1:C");
var name = sheet.getRange(last,4).getValue();
var sheets = [sheet2,sheet7];
var counter = -1
var col = sheet.getLastColumn();


var arr = [];
for (var y = 0; y < folios.length; y++) { //This creates an array for later use.
if(folios[y] == name){
arr.push(y);

}
}

var item = arr.length;

for (var m=item; m > 0; m--) { //This is the loop that is not working.

counter++ //When the first iteration completes, this should increase for later use.


for (var i=0; i < col-5; i++) { //This and the below loop work as intended.



var json = sheet.getRange(arr[m-1],i+6).getValue(); //This is a critical point where M decreases its value all the way to 0 to fetch an entire row from my JSON sheet. It works in testing only for one row. I want it to go through each row in the array and write the values on different sheets, or even in the same sheet.

var jsobj = JSON.parse(json);


for (var j in jsobj) { //Works!

var headerRow = Object.keys(jsobj).sort();
var row = headerRow.map(function(key){ return jsobj[key]});
var contents = [row];
var headers = [headerRow];



sheets[counter].getRange(1+i, 1, contents.length, headerRow.length ).setValues(contents); //Let me explain: var sheets contain an array of two sheets, I want the script to write over each sheet based on the outermost loop.

}


}


}

最后是我的电子表格。

https://docs.google.com/spreadsheets/d/1Jv3E51r5zMuMLmn0qkCRjQBBRJHK_QTSdOeCSLRG7Do/edit?usp=sharing

感谢您的光临。

最佳答案

您的问题是它在循环的第一次迭代中失败。
col 是电子表格中的最后一列索引,在 json 工作表的所有行中,它都是空的,并且尝试将空字符串解析为 JSON 会破坏脚本。

var json = Sheet.getRange(last,i+6).getValue(); 或您的 arr[m] 替代方案之后,您需要检查字符串是否为空,如果是则中断或继续。

if (json === "") {break;}

执行此操作后,它会失败,因为它会尝试写入第三个工作表,因为有 3 个 instalaciones 行,但只有两个工作表可供写入。

关于javascript - 除最外层循环外,多个循环都有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46877808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com