如何在二维数组中返回多个列

时间:2016-10-01 18:55:37

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

我在这里处理这段代码:

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

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

请帮忙。

2 个答案:

答案 0 :(得分:1)

在JavaScript中没有内置的方法可以做到这一点; &#34;多维数组&#34;在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的列编号。)

答案 1 :(得分:0)

你可以通过获得一个包含多个单元格的范围并使用带有数组参数的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]];
    })
);