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

时间:2018-08-23 12:20:26

标签: javascript arrays google-apps-script

请注意,这不是How to extend an existing JavaScript array with another array, without creating a new array?的重复,因为我希望拥有一个嵌套数组,而不是简单地将一个数组与另一个数组扩展成一个数组。在将此问题标记为重复之前,请正确阅读该问题。

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

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

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

model.get_params()

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

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]] ])
  }
}

我想念什么?预先感谢。

3 个答案:

答案 0 :(得分:2)

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

尝试这样:

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

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

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

答案 1 :(得分:0)

可以使用Array#filterArray#pushapply来完成此类操作:

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,但这将为没有匹配项的工作表索引放置空或未定义的元素。

答案 2 :(得分:0)

我假设如果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])
  }
}