我试图创建一个函数,接受任何数组和转置,使行变成列和列变成行。
不知道我做错了什么或错过了,但不断得到这个消息一旦数组通过....
TypeError: Cannot set property "0.0"
错误在行
result[row][col] = array[col][row]; // Rotate
请指教。
function transposeArray(array){
var result = [];
for(var row = 0; row < array.length; row++){ // Loop over rows
for(var col = 0; col < array[row].length; col++){ // Loop over columns
result[row][col] = array[col][row]; // Rotate
}
}
return result;
}
我个人最喜欢的要点是:
function transpose(a)
{
return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}
首先需要为外部结果数组中的每个元素分配一个数组对象。也许有更有效的方法,但我会想:
function transposeArray(array){
var result = [];
for (var col = 0; col < array[0].length; col++) { // Loop over array cols
result[col] = [];
for (var row = 0; row < array.length; row++) { // Loop over array rows
result[col][row] = array[row][col]; // Rotate
}
}
return result;
}
我找到了这个方法:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("SEGUNDOA2E");
var notas = sheet.getRange("G6:AK6").getNotes();
for (var i = 0; i < 31; i++){
var nota = notas[0][i];
var conceptos = sheet.getRange(37+i,7).setValue(nota);
}
}
AdamL和Mogsdad的解决方案是伟大的,但为了完整性,我只是想分享我在发现这个问题之前想到的另一个解决方案:
function transpose2DArray(a)
{
return Array(a).map(r=> r.map(cell => cell[0]))
}
在注意到用这个设置转置值后,我发现了这个:
var a2 = []
a2[0] = a
sheet.getRange(1, 1, a2.length, a2[0].length).setValues(arr2)
// or
//sheet.getRange(1, 1, a[0].length, a.length).setValues(Array(a))
实际上是在单元格中放置单个元素的数组。我的函数使用相同的技巧,但也将2D数组的元素转换为其内部元素(因此删除了嵌套的级别)
如果可以的话
x = [1,3]
它将返回:
我用请求函数公式求解:
var RanMar = HojaResp.getRange("H1:X1"); // Se establece rango para las marcas de cemento.
var Rango2 = HojaInfo.setActiveCell("B3"); // Temporal
Rango2.setFormula('=transpose(Respuestas!H1:X1)');