【问题标题】:How do I return more than one column in a 2d array如何在二维数组中返回多于一列
【发布时间】:2016-10-01 18:55:37
【问题描述】:

我正在处理这段代码:

for (i; i < students.length; i++) {
  ss.getRange(i+1, col).setValue(students[i][0]);
  ss.getRange(i+1, col+1).setValue(students[i][3]);
  ss.getRange(i+1, col+2).setValue(students[i][4]);
}

声明了变量,代码有效,我只是想找出如何从行[i] 中的列[0,3,4] 返回数据并将值全部设置在一行中。我觉得我错过了一些明显的东西。

请帮忙。

【问题讨论】:

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


    【解决方案1】:

    在 JavaScript 中没有内置的方法可以做到这一点; JavaScript 中的“多维数组”不是真正的多维数组,而只是数组的数组。您可以编写一个函数来执行此操作:

    function col(arr, n) {
        return arr.reduce((a, x, i) => (a[i] = x[n], a), []);
    }
    
    // example usage:
    
    const arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
    col(arr, 0);   // returns [1, 4, 7]
    col(arr, 1);   // returns [2, 5, 8];
    col(arr, 2);   // returns [3, 6, 9];
    

    (注意:这使用 ES2015 语法,依赖于 arr 实际上是一个数组数组,并使用从 0 开始的列编号。)

    【讨论】:

      【解决方案2】:

      您确实可以通过获取包含多个单元格的范围并使用带有数组参数的setValues(复数)来稍微优化一下:

      for (i; i < students.length; i++) {
          ss.getRange(i+1, col, 1, 3).setValues([
              [students[i][0], students[i][3], students[i][4]]
          ]);
      }
      

      如果你想更进一步,你可以这样做:

      ss.getRange(i+1, col, students.length - i, 3).setValues( 
          students.slice(i).map(function(a) {
              return [a[0], a[3], a[4]];
          })
      );
      

      注意:我不知道你的代码中 i 的初始值是多少,但如果它是 0,那么你不需要slice

      ss.getRange(1, col, students.length, 3).setValues( 
          students.map(function(a) {
              return [a[0], a[3], a[4]];
          })
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2021-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多