我正在尝试使用单个“ for in”或“ for each”循环遍历多个数组。
我有三个数组,分别是名称, id 和 可用。这些数组的大小相等。
我需要做的是,我需要遍历上述数组的每个值,并根据行和列的索引(分别为i和j的值),将元素的值复制到单元格中在电子表格中。
以下是我正在使用的代码:
for (i = 1; i <= copy_range.getNumRows(); i++) {
for (j = 1; j <= copy_range.getNumColumns(); j++) {
if (j == 1) {
var name_cell = copy_range.getCell(i, j);
// I want to do this however I'm not able to do this since I already have i and j for
// row and column iteration and that another nested loop makes things complicated
name_cell.setValue(name[k]);
}
else if (j == 2) {
var id_cell = copy_range.getCell(i, j);
Logger.log(id_cell.getA1Notation());
id_cell.setValue(id[k]); //Same idea as in previous if
}
else {
var availability_cell = copy_range.getCell(i, j);
Logger.log(availability_cell.getA1Notation());
availability_cell.setValue(available[k]); //Same as if and else if loops previously.
}
}
我无法使用索引的原因是,我已经使用i
和j
作为迭代变量来引用行和列,并且使用另一个嵌套循环并不能达到预期的效果输出-导致不必要的迭代和执行时间。
请让我知道是否有任何方式可以使用“ for in”或类似的循环来迭代所有三个数组的每一项。
答案 0 :(得分:2)
在我看来,您似乎有3个N列的“列”数组,并希望将它们写入N行3列的范围(名为copy_range
)。最好的方法是将这3个数组连接到必需的2D数组中,该2D数组可以在一次调用中直接写入:
const output = name.map(function (nameVal, row) {
return [nameVal, id[row], availability[row]];
});
copy_range.setValues(output);
以上方法使用Array#map
方法来迭代name
数组,并将与每个元素nameVal
关联的索引分配为row
。然后,使用id
访问availability
和row
数组中的相应元素。