Google 表格自定义函数的多个数组输入,可将一个数组除以另一个数组

Multiple array inputs for Google Sheets custom function that divides one array by another

本文关键字:数组 一个 另一个 自定义函数 表格 Google 输入      更新时间:2023-09-26

Google表格中构建运行日志,并且需要编写一个函数,该函数在与距离(英里)和持续时间(分钟)条目的两列相邻的单独列中返回配速(每英里分钟)。

持续时间数据存储在 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;
}

但是我不知道如何递归 calculatePace 函数,以便每次调用都传递 distance.map 和duration.map 中的每一行。

为了进一步澄清,=calculatePace(B1:B10, C1:C10)将存储在单元格 D1 中。

你想要一个谷歌表格函数,将一个数组除以另一个数组。内置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[i][0] 。由于假定范围为列,因此仅考虑第一列。

if 语句检查输入是相同长度的数组还是标量;否则将引发错误。