如何转置/旋转多维数组



我试图创建一个函数,接受任何数组和转置,使行变成列和列变成行。

不知道我做错了什么或错过了,但不断得到这个消息一旦数组通过....

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]

它将返回:

<表类> 1 tbody> <<tr> 3 tbody>

我用请求函数公式求解:

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

相关内容

  • 没有找到相关文章

最新更新