【问题标题】:Optimise custom function with multiple args to accept ranges使用多个参数优化自定义函数以接受范围
【发布时间】:2017-02-28 16:35:59
【问题描述】:

谷歌应用程序的开发者指南建议编写你的函数来接受范围进行优化,如下所示:

function DOUBLE(input) {
  if (input.map) {            // Test whether input is an array.
    return input.map(DOUBLE); // Recurse over array if so.
  } else {
    return input * 2;
  }
}

我想知道你会如何处理多个参数? 例如

function DOUBLEandADD(doubleThis, addThis){
    return (doubleThis * 2) + addThis;
}

您是否同时检查两者以及如何迭代范围?

大概是这样的吧?

function DOUBLEandADD(doubleThis, addThis) {
   if (doubleThis.map && addThis.map){
       var d = Array.from(doubleThis.values());
       var a = Array.from(addThis.values());

       for (var i = 0; i < d.length(); i++){
            return DOUBLEandADD(d[i],a[i]);
       }
   } else {
       return (doubleThis * 2) + addThis;
   }
}

【问题讨论】:

    标签: google-apps-script google-sheets custom-function


    【解决方案1】:

    您可以将 map 函数包装在一个匿名函数中并传递附加参数。

    function DOUBLEandADD(input,addend) {
      if (input.map) {           
        return input.map(function(i){return DOUBLEandADD(i,addend)}); 
      } else {
        return (input * 2) + addend;
      }
    }
    

    【讨论】:

    • addend 在这里是常量,如果我理解正确的话,但我希望两个 args 都可能是范围。
    • 使用 2 个范围将非常适合功能的特定需求。单一的工作解决方案不会涵盖所有情况。到目前为止,这个问题太宽泛,无法回答。聚焦你的问题。
    【解决方案2】:

    在您的情况下,我不会使用 map。这个怎么样:

    function DOUBLEandADD(doubleThis, addThis) {
      if (Array.isArray(doubleThis) || Array.isArray(addThis)) {
        if (!Array.isArray(doubleThis) ||
            !Array.isArray(addThis) ||
            doubleThis.length != addThis.length) {
          throw new Error("doubleThis and addThis arrays must be same length.");
        }
        var results = [];
        for (var i = 0; i < doubleThis.length; i++) {
          results.push((doubleThis[i] * 2) + addThis[i]);
        }
        return results;
      } else {
        return (doubleThis * 2) + addThis;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多