首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JS在apps脚本中将数组推送到数组(concat)

JS在apps脚本中将数组推送到数组(concat)
EN

Stack Overflow用户
提问于 2018-08-23 20:20:26
回答 3查看 3.7K关注 0票数 0

注意,这不是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,它会将值相加,但不是作为数组:

代码语言:javascript
运行
复制
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合并2个数组。我也试过了,但它没有向数组中添加任何东西:

代码语言:javascript
运行
复制
...
if ((accounts_range[i][1] == 'test') {
    accounts_array.concat( [accounts_range[i][1]],[accounts_range[i][2]] )
  }
...

我遗漏了什么?提前谢谢。

EN

Stack Overflow用户

发布于 2018-08-23 21:49:49

这种类型的操作可以使用Array#filterArray#pushapply灵活地完成

代码语言:javascript
运行
复制
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});

上面的代码在所有工作表的所有行的给定列中搜索给定值,并将其收集到一个二维数组中。如果所有行的列数都相同,那么这个数组就可以直接用Range#setValues序列化。

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

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51985692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档