【问题标题】:Multiple array inputs for Google Sheets custom function that divides one array by another用于将一个数组除以另一个数组的 Google 表格自定义函数的多个数组输入
【发布时间】:2016-02-06 19:04:04
【问题描述】:

在 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 中。

【问题讨论】:

    标签: javascript arrays google-apps-script google-sheets


    【解决方案1】:

    您需要一个将一个数组除以另一个数组的 Google 表格函数。内置的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 语句检查输入是相同长度的数组还是标量;否则抛出错误。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2012-10-18
      • 2021-09-19
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      相关资源
      最近更新 更多