Javascript Google Sheets自定义函数的多个数组输入,用于将一个数组除以另一个数组
在Google Sheets中构建跑步日志,需要编写一个函数,在两列相邻的单独列中返回速度(每英里分钟数),并输入距离(英里)和持续时间(分钟) 持续时间数据存储在B列中。Javascript Google Sheets自定义函数的多个数组输入,用于将一个数组除以另一个数组,javascript,arrays,google-apps-script,google-sheets,Javascript,Arrays,Google Apps Script,Google Sheets,在Google Sheets中构建跑步日志,需要编写一个函数,在两列相邻的单独列中返回速度(每英里分钟数),并输入距离(英里)和持续时间(分钟) 持续时间数据存储在B列中。 距离数据存储在C列中。 速度数据返回到D列 我可以成功地将数组返回到D列,使B列中每行的持续时间值加倍: function calculatePace(distance, duration){ if(distance.map){ return distance.map(calculatePace); }
距离数据存储在C列中。
速度数据返回到D列 我可以成功地将数组返回到D列,使B列中每行的持续时间值加倍:
function calculatePace(distance, duration){
if(distance.map){
return distance.map(calculatePace);
}
else{
var pace = duration*2;
return pace;
}
}
我真正需要的是将持续时间数组除以距离数组,这样
else{
var pace = duration/distance;
return pace;
}
但是我不知道如何递归calculatePath
函数,以便distance.map和duration.map中的每一行都为每个调用传递
为了进一步澄清,
=CalculatePath(B1:B10,C1:C10)
将存储在单元格D1中。您需要一个将一个数组除以另一个数组的Google Sheets函数。内置的arrayformula
已执行以下操作:
=arrayformula(B1:B10/C1:C10)
但如果需要自定义函数(可能是更大计算的一部分),它将如下所示:
function calculatePace(distance, duration){
if (distance.map && duration.map && distance.length == duration.length) {
return distance.map(function(a, i) {
return a[0]/duration[i][0];
});
}
else if (!distance.map && !duration.map) {
return distance/duration;
}
else {
throw new Error('The arguments must have the same number of rows');
}
}
最重要的部分是数组的划分
distance.map(function(a, i) {
return a[0]/duration[i][0];
});
这里a
是第一个范围中的一行,因此a[0]
访问其第一个元素。duration数组的匹配元素是duration[i][0]
。由于范围假定为列,因此只考虑第一列
if语句检查输入是相同长度的数组还是标量;否则将抛出一个错误