【问题标题】:Concat array multiple times based on value within the Array.根据数组中的值多次连接数组。
【发布时间】:2018-11-18 13:43:04
【问题描述】:

我正在尝试为工作场所的重复性任务设计一个小时间表。为了进行设置,我正在遍历我的数据以在第 2 列中找到“Quarterly”的值,在第 3 列中找到“Recurring”的值。

如果它确实找到了这些值,我将行数据推送到一个数组中。然后,我根据数组中名为 timesrecurring 的第 4 个值多次连接数组(为此,我使用了下面代码中未显示的不同函数)。

最后,我使用 .setvalues() 将数组复制到另一张纸上。代码如下:

function myFunction() {
 var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 var sheet = ss.getSheetByName("Input Table"); 
 var targetsheet = ss.getSheetByName("Summary Calendar");
 var lastrow = sheet.getLastRow();
 var datarange = sheet.getRange(8, 2, lastrow-1 , 10).getValues();
 var x = [];

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

 if (datarange[i][1] == "Recurring" && datarange[i][2] == "Quarterly" ){

  x.push([datarange[i][0],datarange[i][1],datarange[i][2],datarange[i] 
  [3],datarange[i][4],datarange[i][7],datarange[i][8],datarange[i] 
  [9],datarange[i][5],datarange[i][6])


  var timesrecurring = datarange[i][3] 
  var y = replicateArray(x,timesrecurring)

  targetsheet.getRange(targetsheet.getLastRow()+1, 2, 
  y.length,y[0].length).setValues(y);
  }
 }

}

正如您在此处看到的,我正在寻找带有“Quarterly”和“Recurring”的行,并将相关行推送到数组中。然后我根据 timesrecurring 的值连接数组。

如果在我应用 for 循环的原始数据范围中只有一行带有“季度”和“重复”的行,则该脚本运行良好。但是,一旦我添加第二行,就会发生以下情况:

第一列 FTE 报告应该有 6 行,Ad-hoc 报告应该有 3 行。然而,该脚本首先从原始数据复制 FTE 报告 6 次,然后它需要 FTE 报告和 Ad-hoc 3 次(尽管它应该只是 3 倍)。似乎第二次将 FTE 报告行和 Ad-hoc 行存储在阵列中,而不仅仅是 Ad-hoc 行。

我已经尝试了一些方法来解决这个问题并在网上查看,但我找不到任何有效的方法。任何帮助,将不胜感激。

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    每次拨打x.push 电话都会使x 成长。因此,如果在调用复制时 x 中有四个不同的行,那么结果中将有 8 个。

    您可能只想多次将特定的datarange 行添加到x。您可以使用push.apply 语法来避免需要键入datarange[i] 的内部元素:

    const x = [];
    datarange.forEach(function (row, i) {
      if (row[1] === "Recurring" && row[2] === "Quarterly") {
        var timesRepl = row[3];
        for(var n = 0; n < timesRepl; ++n) {
          Array.prototype.push.apply(x, row);
        }
        ... // Do other stuff with a quarterly recurring row
      }
      ...// Do other stuff with any row
    });
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多