2012-11-03 113 views
2

我有谷歌电子表格中使用应用程序脚本的二维数组问题。2d子列表索引谷歌脚本

我知道要让代码最快,我应该尽可能少地使用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]; 

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

谢谢。

回答

3

为补充亚当答案,在你的例子中IO_array[0]是第1行,IO_array[1]是第2行等等,它们中的每一个都是1维数组。 所以'行'很容易管理。

至于列,如亚当建议你将不得不重复,这里是一个可能的例子:

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 
} 

希望两个答案将使不够清晰;)

+0

哇。对于这样一个简单的行为来说太复杂 如果我想从IO_array中创建一个子3x3阵列,该怎么办?你能帮我一些代码吗?感谢Serge。 – jason

3

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

通过使用slice()。 ;-)

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

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


编辑:添加塞尔的增加,并在回答您的意见,这里是从一个数组返回一个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; 
} 
+0

嗨亚当,这是什么我称之为'积极合作';-)感谢和+1“补充补充”! –