Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Google Apps脚本中通过引用在函数之间传递变量_Javascript_Google Apps Script_Pass By Reference - Fatal编程技术网

Javascript 在Google Apps脚本中通过引用在函数之间传递变量

Javascript 在Google Apps脚本中通过引用在函数之间传递变量,javascript,google-apps-script,pass-by-reference,Javascript,Google Apps Script,Pass By Reference,我对谷歌应用程序脚本非常陌生,几天前才开始学习。我以前有C++知识,但不多。 我试着写我的第一个脚本,在谷歌工作表上做一些动作。以下是我迄今为止创建的代码: var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = ss.getActiveSheet(); function MainFunc() { var LoopCounter = 0; SaveDataInArray(LoopCounter); Logger.log(Loo

我对谷歌应用程序脚本非常陌生,几天前才开始学习。我以前有C++知识,但不多。

我试着写我的第一个脚本,在谷歌工作表上做一些动作。以下是我迄今为止创建的代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();

function MainFunc() {
  var LoopCounter = 0;
  SaveDataInArray(LoopCounter);
  Logger.log(LoopCounter);
}

function SaveDataInArray(LoopCounter) {
  var InfiniteForLoopTrigger = 1;
  var range;
  var VolumeArray = [];
  var SignalArray = [];

  //Save Data in Array
  for(var i = 2; InfiniteForLoopTrigger > 0; i++){
    range = s.getRange(i, 1);
    if(range.isBlank()){
      break;
    }
    VolumeArray[LoopCounter] = s.getRange(i, 1).getValue();
    SignalArray[LoopCounter] = s.getRange(i, 2).getValue();
    LoopCounter++;
  }
}
我意识到LoopCounter的值在被传递到函数SaveDataInArray之后没有改变。我知道在论点前面有一个符号(&),比如

function SaveDataInArray(& LoopCounter)

帮助C++中的问题,但我不知道如何在谷歌应用程序脚本中进行。 如果有人能帮我,我会很高兴的。 谢谢并致以最良好的祝愿, 最大值

  • 您希望使用Google Apps脚本通过引用调用该值
  • 如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

    问题和解决方法: 不幸的是,数字和字符串的变量不能用作引用调用。例如,当运行以下脚本时,
    0.0,0,1.0,1.0
    可以在
    Logger.log
    中看到

    function work(a, b, c, d) {
      a = 1;
      b = "1";
      c[0] = 1;
      d.value = 1;
    }
    
    function run() {
      var a = 0;
      var b = "0";
      var c = [0];
      var d = {value: 0};
      work(a, b, c, d);
      Logger.log("%s, %s, %s, %s", a, b, c[0], d.value) // 0.0, 0, 1.0, 1.0
    }
    
    因此,在这种情况下,请使用如下对象

    模式1: 在此模式中,数组用作对象

    function MainFunc() {
      var LoopCounter = [0];
      SaveDataInArray(LoopCounter);
      Logger.log(LoopCounter[0]);
    }
    
    function SaveDataInArray(LoopCounter) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var s = ss.getActiveSheet();
      var InfiniteForLoopTrigger = 1;
      var range;
      var VolumeArray = [];
      var SignalArray = [];
    
      //Save Data in Array
      for(var i = 2; InfiniteForLoopTrigger > 0; i++){
        range = s.getRange(i, 1);
        if(range.isBlank()){
          break;
        }
        VolumeArray[LoopCounter[0]] = s.getRange(i, 1).getValue();
        SignalArray[LoopCounter[0]] = s.getRange(i, 2).getValue();
        LoopCounter[0]++;
      }
    }
    
    function MainFunc() {
      var LoopCounter = {value: 0};
      SaveDataInArray(LoopCounter);
      Logger.log(LoopCounter.value);
    }
    
    function SaveDataInArray(LoopCounter) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var s = ss.getActiveSheet();
      var InfiniteForLoopTrigger = 1;
      var range;
      var VolumeArray = [];
      var SignalArray = [];
    
      //Save Data in Array
      for(var i = 2; InfiniteForLoopTrigger > 0; i++){
        range = s.getRange(i, 1);
        if(range.isBlank()){
          break;
        }
        VolumeArray[LoopCounter.value] = s.getRange(i, 1).getValue();
        SignalArray[LoopCounter.value] = s.getRange(i, 2).getValue();
        LoopCounter.value++;
      }
    }
    
    模式2: 在这个模式中,JSON对象被用作对象

    function MainFunc() {
      var LoopCounter = [0];
      SaveDataInArray(LoopCounter);
      Logger.log(LoopCounter[0]);
    }
    
    function SaveDataInArray(LoopCounter) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var s = ss.getActiveSheet();
      var InfiniteForLoopTrigger = 1;
      var range;
      var VolumeArray = [];
      var SignalArray = [];
    
      //Save Data in Array
      for(var i = 2; InfiniteForLoopTrigger > 0; i++){
        range = s.getRange(i, 1);
        if(range.isBlank()){
          break;
        }
        VolumeArray[LoopCounter[0]] = s.getRange(i, 1).getValue();
        SignalArray[LoopCounter[0]] = s.getRange(i, 2).getValue();
        LoopCounter[0]++;
      }
    }
    
    function MainFunc() {
      var LoopCounter = {value: 0};
      SaveDataInArray(LoopCounter);
      Logger.log(LoopCounter.value);
    }
    
    function SaveDataInArray(LoopCounter) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var s = ss.getActiveSheet();
      var InfiniteForLoopTrigger = 1;
      var range;
      var VolumeArray = [];
      var SignalArray = [];
    
      //Save Data in Array
      for(var i = 2; InfiniteForLoopTrigger > 0; i++){
        range = s.getRange(i, 1);
        if(range.isBlank()){
          break;
        }
        VolumeArray[LoopCounter.value] = s.getRange(i, 1).getValue();
        SignalArray[LoopCounter.value] = s.getRange(i, 2).getValue();
        LoopCounter.value++;
      }
    }
    

    如果我误解了您的问题,并且这不是您想要的方向,我很抱歉。

    在js中,原语总是通过值传递,而对象总是通过引用传递。因此,您可以通过在函数之间传递一个配置对象,并使用其属性之一共享状态来装配一个简单的解决方案。谢谢,这是我关于堆栈溢出的第一个问题,您确实找到了答案。它真的帮助了我。谢谢你用我自己的代码展示它,因为它让我更容易获得它@谢谢你的回复。我很高兴你的问题解决了。