3

我在使用应用脚本的谷歌电子表格中有二维数组问题。

我知道要让代码最快,我应该尽可能少地使用 get 和 set 函数。所以我试图先将整张纸读入二维数组,然后再引用其中的一部分。除了我不确定如何在二维数组中引用它。

这是我到目前为止所做的。

var ss = SpreadsheetApp.getActiveSpreadsheet()
var COMPANYIOSheet=ss.getSheetByName("Sheet1"); 
var IO_array= COMPANYIOSheet.getRange("A1:c10").getValues();

我想做类似的事情:

var subarray=IO_array[3:5][1];

但这不起作用。我似乎只能参考一点,即:

var subarray=IO_array[3][1];

我如何切片成一个子二维数组?

谢谢。

4

2 回答 2

5

我如何切片成一个子二维数组?

通过使用slice(). ;-)

var subarray=IO_array.slice(2, 5);

然后就可以参考了subarray[i][1]。如果您需要创建一个只有“第二列”的新数组,则需要使用一些迭代。


编辑:添加到 Serge 的添加中,并回复您的评论,这是从数组返回 2D 子数组的一般方法:

function slice2d(array, rowIndex, colIndex, numRows, numCols) {
  var result = [];
  for (var i = rowIndex; i < (rowIndex + numRows); i++) {
    result.push(array[i].slice(colIndex, colIndex + numCols));
  }
  return result;
}
于 2012-11-03T20:40:57.753 回答
4

作为对亚当回答的补充,在您的示例IO_array[0]中是第 1 行,IO_array[1]第 2 行等......,它们中的每一个都是一维数组。所以“行”很容易管理。

至于列,正如 Adam 建议的那样,您必须进行迭代,这是一个可能的示例:

var col = new Array()
for(i=0;i<IO_array.length;++i){
  col.push(IO_array[i][0] ;// taking index 0 means I'll get column A of each row and put it in the new array
}

希望两个答案都足够清楚;)

于 2012-11-03T23:19:32.817 回答