Google电子表格脚本 - 如何转置/旋转多维数组?

时间:2013-05-18 06:37:05

标签: javascript multidimensional-array google-apps-script google-sheets

我正在尝试创建一个接收任何数组并将其转置的函数,以便行转换为列,列转换为行。

不确定我做错了什么或丢失但是一旦数组通过就继续收到此消息....

TypeError:无法将undefined的属性“0.0”设置为“xxxxxx”。

错误在线

result [row] [col] = array [col] [row]; //旋转

任何指针都会非常感激。

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;
    }

4 个答案:

答案 0 :(得分:12)

我个人最喜欢的是this gist

function transpose(a)
{
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}

答案 1 :(得分:3)

您需要首先为外部结果数组中的每个元素分配一个数组对象。可能有更有效的方法,但我会想:

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;
}

答案 2 :(得分:1)

我找到了这样的方式:

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);
    } 
}

希望这有帮助。

答案 3 :(得分:0)

我用请求函数公式解决了:

  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)');

非正统,但对我有用。

问候,

Harold Bautista