繁体   English   中英

JS在应用程序脚本中将数组推送到数组(concat)

[英]JS pushing arrays to array (concat) in apps script

请注意,这与如何在不创建新数组的情况下将现有JavaScript数组与另一个数组进行扩展不是重复的 因为我正在寻找一个嵌套数组,而不是简单地用另一个数组扩展一个数组以得到1个数组。 在将此问题标记为重复之前,请先正确阅读该问题。

我正在遍历(Google)工作表中的行以收集值,并希望将每一行作为数组添加到数组中,这将导致如下所示的输出(简化示例说明):

array_main = [[row1_cell1,row1_cell2,row1_cell3],[row2_cell1,row2_cell2,row2_cell3],...]

我首先使用.push尝试了此操作,它添加了值,但不作为数组:

 accounts_last_row = 10 accounts_array = [] for (var i = 0; i < accounts_last_row; ++i) { if ((accounts_range[i][1] == 'test') { accounts_array.push([ [accounts_range[i][1]],[accounts_range[i][2]] ]) } } 

我知道有人问过类似的问题,但其中大多数只是建议使用.concat合并两个数组。 我也尝试过此操作,但它不会向数组添加任何内容:

 ... if ((accounts_range[i][1] == 'test') { accounts_array.concat( [accounts_range[i][1]],[accounts_range[i][2]] ) } ... 

我想念什么? 提前致谢。

您几乎拥有了,内部数组很简单,括号太多了。

尝试这样:

accounts_array.push( [accounts_range[i][1],accounts_range[i][2]] );

上面的代码将用于添加行。 如果要将数据添加为单列,则必须更改方括号,如下所示:

accounts_array.push( [accounts_range[i][1]],[accounts_range[i][2]] );

可以使用Array#filterArray#push巧妙地完成这种类型的操作并apply

const results = [];
const colIndexToTest = /** 0, 1, etc. */;
const requiredValue = /** something */;
SpreadsheetApp.getActive().getSheets().forEach(
  function (sheet, sheetIndex) {
    var matchedRows = sheet.getDataRange().getValues().filter(
      function (row, rowIndex) {
        // Return true if this is a row we want.
        return row[colIndexToTest] === requiredValue;
      });
    if (matchedRows.length)
      Array.prototype.push.apply(results, matchedRows);
  });
// Use Stackdriver to view complex objects properly.
console.log({message: "matching rows from all sheets", results: results});

上面的代码在所有工作表的所有行的给定列中搜索给定值,并将其收集到2d数组中。 如果所有行的列数均相同,则此数组可以使用Range#setValues直接序列化。

该代码本可以使用map而不是forEachpush.apply ,但是这将为没有匹配项的工作表索引放置空或未定义的元素。

我假设account-range [i] [1]是否为'test',则将整个行复制到accounts_array。 删除第二个索引。

accounts_last_row = 10
accounts_array = []

for (var i = 0; i < accounts_last_row; ++i) {
  if ((accounts_range[i][1] == 'test') {
    accounts_array.push(accounts_range[i])
  }
}

暂无
暂无

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

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