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

Javascript JS在应用程序脚本中将数组推送到数组(concat),javascript,arrays,google-apps-script,Javascript,Arrays,Google Apps Script,注意,这不是的副本,因为我希望有一个嵌套数组,而不是简单地用另一个数组扩展一个数组,从而得到一个数组。请仔细阅读问题,然后再将其标记为重复 我正在(Google)工作表中的行中循环以收集值,并希望将每一行作为数组添加到一个数组中,这将产生如下输出(简化示例以说明): 数组_main=[[row1_cell1,row1_cell2,row1_cell3],[row2_cell1,row2_cell2,row2_cell3],…] 我第一次尝试使用.push,它添加值,但不是作为数组: accoun

注意,这不是的副本,因为我希望有一个嵌套数组,而不是简单地用另一个数组扩展一个数组,从而得到一个数组。请仔细阅读问题,然后再将其标记为重复

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

数组_main=[[row1_cell1,row1_cell2,row1_cell3],[row2_cell1,row2_cell2,row2_cell3],…]

我第一次尝试使用.push,它添加值,但不是作为数组:
accounts\u last\u row=10
帐户\u数组=[]
对于(变量i=0;i}
您几乎拥有了它,内部数组很简单,括号太多了

试着这样做:

accounts\u array.push([accounts\u range[i][1],accounts\u range[i][2]);

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


accounts\u array.push([accounts\u range[i][1],[accounts\u range[i][2]);

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

试着这样做:

accounts\u array.push([accounts\u range[i][1],accounts\u range[i][2]);

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


accounts\u array.push([accounts\u range[i][1],[accounts\u range[i][2]])
这种类型的操作可以通过
array#filter
array#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
而不是
forEach
push.apply
,但这将为没有匹配项的工作表索引放置空的或未定义的元素。

此类型的操作可以通过
数组#过滤器
数组#push
应用
巧妙地完成:

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

我假设如果account range[I][1]为“test”,则将整行复制到accounts\u数组。删除第二个索引

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])
  }
}
accounts\u last\u row=10
帐户\u数组=[]
对于(变量i=0;i
我假设帐户范围[I][1]为“测试”,则将整行复制到帐户数组。删除第二个索引

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])
  }
}
accounts\u last\u row=10
帐户\u数组=[]
对于(变量i=0;i
我也这么认为,并尝试过,但仍然没有返回嵌套数组。至少,这是我在应用程序脚本日志文件中看到的。这可能是应用程序脚本记录器没有显示嵌套数组的问题吗?日志输出如下:accounts\u array:test,96145912,test,37275407,test,127772724(我希望accounts_array:[test,96145912],[test,37275407],[test,127772724]使用JSON.Stringify(value)查看结构。我确信这是正确的方法,一直使用它;)你的意思是在日志中,还是在应用程序脚本中如何使用它?这个答案(
accounts_array.push([accounts_range[I][1],accounts_range[I][2]);
)应该行。你一定在别的地方做错了什么。这就是为什么它被接受:)。正常的日志仍然将其显示为一个数组,这是混乱开始的原因。尝试了json日志的所有选项,但最明显的一个选项除外…也这么认为并尝试了,但仍然没有返回嵌套数组。至少,我在应用程序脚本日志文件中看到了这一点。这可能是应用程序脚本日志中没有显示的问题吗嵌套数组?日志输出如下:accounts_array:test,96145912,test,37275407,test,127772724(我希望accounts_array:[test,96145912],[test,37275407],[test,127772724]使用JSON.Stringify(value)查看结构。我确信这是正确的方法,一直使用它;)你的意思是在日志中还是在应用程序脚本中如何使用?这个答案(
accounts\u array.push([accounts\u range[I][1],accounts\u range[I][2]];
)应该可以工作。你一定是在其他地方做错了什么。这就是为什么它被接受的原因:)(正常)日志仍然将其显示为一个数组,这是混乱的开始。尝试了json日志,包括所有选项,但最明显的一个选项…不同用例的可能重复,您的链接旨在有一个数组(不是嵌套的)输出。这个想法适用。
.push.apply
是我的重点。你建议的确切语法是什么?如果我只是像在另一个问题中那样使用它,我的数组将保持为空:accounts\u array.push.apply([accounts\u range[I][1],accounts\u range[I][2])我写了一个答案,说明了我想让你从另一个问题中得到什么。不同用例的可能重复,你的链接的目标是有一个数组(不是嵌套的)输出。这个想法适用。
.push.apply
是我的观点。你建议的确切语法是什么?如果我只是像在另一个问题中一样使用它,我的数组将保持为空:accounts\u array.push.apply([accounts\u range[I][1],acc