【问题标题】:Combining arrays to use in Google Sheets组合数组以在 Google 表格中使用
【发布时间】:2014-11-21 14:07:50
【问题描述】:

我在将数组组合成一个数组然后用下面的代码翻转它时遇到了一些麻烦。目标是在电子表格的一列中设置一组值。在 titleArray 函数之后,我想让一个数组分布在一行的多列中。然后,使用我在另一个 Stack Overflow 线程 (Google Spreadsheet Script - How to Transpose / Rotate Multi-dimensional Array?) 中找到的函数,我想翻转数组,使其分布在一列的多行中。当前代码为 array1 中的每个元素返回一个数组,所有元素都在另一个数组中。然后,transposeArray 函数将每个数组中的值组合起来,1 与 1、2 与 2 等等。谁能发现我在这里做错了什么?

var titleArray = function(){
    var output = [];
    for(i=0; i < array1.length; i++){
          if(array1[i].length > 0){   
            var titles = ["",array1[i] + " Data"].concat(array2, array3, array4, array5, array6, array7);
            output.push(titles);
          }
        }
        return(output);
      }
    }

      
    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;
      }
    transposeArray(titleArray);

【问题讨论】:

  • 最后一行更改为transposeArray(titleArray());会发生什么?
  • 每个值都与另一个数组中的对应值配对。在第一个函数之后,我看到类似这样的内容... [[,array1value1,array1value2,array1value3],[array2value1,array2value2,array2value3]] 然后在第二个函数之后,我看到类似这样的内容... [[, ], [array1value1,array2value1],[array1value2,array2value2],[array1value3,array2value3]]

标签: javascript arrays google-apps-script google-sheets


【解决方案1】:

我能够与一名程序员坐下来,他帮助我解决了这个问题。本质上,我需要使用 concat 方法而不是 push 方法。我在此过程的早期尝试使用 concat ,但以下面演示的第一种方式而不是第二种方式使用它。我也在下面包含了完整的新代码。

output.concat(titles);
output = output.concat(titles);

var titleArray = function(){
    var output = [];
    for(i=0; i < array1.length; i++){
          if(array1[i].length > 0){   
            var titles = ["",array1[i] + " Data"].concat(array2, array3, array4, array5, array6, array7);
            ouput = output.concat(titles);
          }
        }
        return(output);
      }
    }

      
    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;
      }
    transposeArray([titleArray]);

【讨论】:

  • 我遇到了这个问题。谢谢卡尔文。我想提醒任何偶然发现这一点的人,如果您稍后将在同一个数组中执行 bar.concat(foo),那么在 for 循环中您“var foo”是至关重要的。我正在做刚才提到的所有事情,我在 for 循环之外声明了 foo。
猜你喜欢
  • 2021-06-04
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
相关资源
最近更新 更多