我正在处理这段代码:
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中没有内置的方法;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的列编号。)
您确实可以通过获得具有多个单元格的范围并使用带有数组参数的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]];
})
);