Javascript Google Sheets自定义函数的多个数组输入,用于将一个数组除以另一个数组

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

在Google Sheets中构建跑步日志,需要编写一个函数,在两列相邻的单独列中返回速度(每英里分钟数),并输入距离(英里)和持续时间(分钟)

持续时间数据存储在B列中。
距离数据存储在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语句检查输入是相同长度的数组还是标量;否则将抛出一个错误