繁体   English   中英

for 循环中的 function 问题打破循环

[英]Issue with function in for loop breaking the loop

此代码用于扫描工作表中的货币值,并根据列和行标题为 JSON 构建键/值对。 所以本质上,它找到一种货币,然后回溯行号和列号,直到它达到一个非货币、非空白值,并将其与货币一起使用来形成货币对。 我将列出三个功能,第一个只是通过确定值是否为货币来启用第二个,第二个构建 object,第三个迭代工作表并为每个工作表构建 object 符合我的标准。

每张纸都有一个遵循这种模式的名称,“name_name_type_location”,我的标准是任何类型为“AF”的东西。

我遇到的问题是,当我在 publishedSheets() 中运行关税对象(表格 [i])时,它似乎打破了 for 循环,所以我只收到第一张表格 object,即使至少有四个符合我的标准. 我已经通过删除 dutyObject(sheets[i]) 调用进行了测试,它工作正常。 这件事打破了我的循环。

我该如何解决?

function isCurr(x){
  var regex  = /^[$]\d+(?:\.\d{0,2})$/;
  if (regex.test(x)){
    return true;
  }
  else{
    return false;
  }
}

function tariffObject(sheet){
  var data = sheet.getDataRange().getDisplayValues();
  var obj = {};
  var arr = [];
  for (i=0;i<data.length;i++){
    for (j=0;j<data[i].length;j++){
      if (isCurr(data[i][j])){
        //rows
        var y = i;
        while (isCurr(data[y][j]) || data[y][j].length <= 0){          
          y = y-1;
        }
        //columns
        var x = j;
        while (isCurr(data[i][x]) || data[i][x].length <= 0){
          x = x-1;
        }
        arr.push([data[i][x],data[y][j],data[i][j]]);
      }
    }
  }
  for (k=0;k<arr.length;k++){
    if (!obj[arr[k][0]]){
      obj[arr[k][0]] = {};
    }
    if (!obj[arr[k][0]][arr[k][1]]){
      obj[arr[k][0]][arr[k][1]] = {};
    }
    obj[arr[k][0]][arr[k][1]] = arr[k][2];
  }
  return obj;
}

function publishedSheets(){
  var ss = SpreadsheetApp.openById(my spreadsheet id),
      sheets = ss.getSheets(),
      loc = {};
  for (i=0;i<sheets.length;i++){
    var name = sheets[i].getName(),
        spl = name.split("_");
    if (spl[2] == "AF"){
      loc[spl[3]] = {};
      var myObj = tariffObject(sheets[i]);
      loc[spl[3]] = myObj;
    }
  }
  Logger.log(loc);
}

在此处输入图像描述

尝试这个:

function creatingJson() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1');
  const [hA, ...vs] = sh.getDataRange().getValues();
  let jObj = { pA: [] };
  vs.forEach((r, i) => {
    r.forEach((c, j) => {
      if (j == 0) {
        jObj[c] = {};
        jObj.pA.push(c);
      } else {
        jObj[vs[i][0]][hA[j]] = c;
      }
    });
  });
  Logger.log(JSON.stringify(jObj));
  hA.shift();
  let s = '';
  jObj.pA.forEach((p, i) => {
    s += p + "={";
    hA.forEach((h, j) => {
      if (j > 0) s += ',';
      s += h + "=" + jObj[p][h];
    });
    s+='}\n';
  });
  Logger.log(s);

}

表 1:

H1 H2 H3 H4 H5 H6 H7 H8 H9 H10
R1 1 11 21 31 41 51 61 71 81 91
R2 2 12 22 32 42 52 62 72 82 92
R3 3 13 23 33 43 53 63 73 83 93
R4 4 14 24 34 44 54 64 74 84 94
R5 5 15 25 35 45 55 65 75 85 95
R6 6 16 26 36 46 56 66 76 86 96
R7 7 17 27 37 47 57 67 77 87 97
R8 8 18 28 38 48 58 68 78 88 98
R9 9 19 29 39 49 59 69 79 89 99
R10 10 20 30 40 50 60 70 80 90 100

Output:

R1={H1=1,H2=11,H3=21,H4=31,H5=41,H6=51,H7=61,H8=71,H9=81,H10=91}
R2={H1=2,H2=12,H3=22,H4=32,H5=42,H6=52,H7=62,H8=72,H9=82,H10=92}
R3={H1=3,H2=13,H3=23,H4=33,H5=43,H6=53,H7=63,H8=73,H9=83,H10=93}
R4={H1=4,H2=14,H3=24,H4=34,H5=44,H6=54,H7=64,H8=74,H9=84,H10=94}
R5={H1=5,H2=15,H3=25,H4=35,H5=45,H6=55,H7=65,H8=75,H9=85,H10=95}
R6={H1=6,H2=16,H3=26,H4=36,H5=46,H6=56,H7=66,H8=76,H9=86,H10=96}
R7={H1=7,H2=17,H3=27,H4=37,H5=47,H6=57,H7=67,H8=77,H9=87,H10=97}
R8={H1=8,H2=18,H3=28,H4=38,H5=48,H6=58,H7=68,H8=78,H9=88,H10=98}
R9={H1=9,H2=19,H3=29,H4=39,H5=49,H6=59,H7=69,H8=79,H9=89,H10=99}
R10={H1=10,H2=20,H3=30,H4=40,H5=50,H6=60,H7=70,H8=80,H9=90,H10=100}

output 是从此 object 生成的:

{"pA":["R1","R2","R3","R4","R5","R6","R7","R8","R9","R10"],"R1":{"H1":1,"H2":11,"H3":21,"H4":31,"H5":41,"H6":51,"H7":61,"H8":71,"H9":81,"H10":91},"R2":{"H1":2,"H2":12,"H3":22,"H4":32,"H5":42,"H6":52,"H7":62,"H8":72,"H9":82,"H10":92},"R3":{"H1":3,"H2":13,"H3":23,"H4":33,"H5":43,"H6":53,"H7":63,"H8":73,"H9":83,"H10":93},"R4":{"H1":4,"H2":14,"H3":24,"H4":34,"H5":44,"H6":54,"H7":64,"H8":74,"H9":84,"H10":94},"R5":{"H1":5,"H2":15,"H3":25,"H4":35,"H5":45,"H6":55,"H7":65,"H8":75,"H9":85,"H10":95},"R6":{"H1":6,"H2":16,"H3":26,"H4":36,"H5":46,"H6":56,"H7":66,"H8":76,"H9":86,"H10":96},"R7":{"H1":7,"H2":17,"H3":27,"H4":37,"H5":47,"H6":57,"H7":67,"H8":77,"H9":87,"H10":97},"R8":{"H1":8,"H2":18,"H3":28,"H4":38,"H5":48,"H6":58,"H7":68,"H8":78,"H9":88,"H10":98},"R9":{"H1":9,"H2":19,"H3":29,"H4":39,"H5":49,"H6":59,"H7":69,"H8":79,"H9":89,"H10":99},"R10":{"H1":10,"H2":20,"H3":30,"H4":40,"H5":50,"H6":60,"H7":70,"H8":80,"H9":90,"H10":100}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM