2012-11-03 51 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「補充補充」! –