max*_*uck 4 javascript pass-by-reference google-apps-script
我对 Google Apps Script 真的很陌生,几天前才开始学习它。我以前有 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++;
}
}
Run Code Online (Sandbox Code Playgroud)
我意识到 LoopCounter 的值在传递给函数 SaveDataInArray 后没有改变。我知道在参数前面有一个和号 (&),比如
function SaveDataInArray(& LoopCounter)
Run Code Online (Sandbox Code Playgroud)
在 C++ 中帮助解决问题,但我不知道如何在 Google Apps Script 中处理它。
如果有人可以帮助我,我会很高兴。谢谢和最好的问候,马克斯
如果我的理解是正确的,这个答案怎么样?请将此视为几种可能的答案之一。
不幸的是,数字和字符串的变量不能用作引用调用。例如,当运行以下脚本时,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
}
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,请使用如下所示的对象。
在此模式中,使用数组作为对象。
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]++;
}
}
Run Code Online (Sandbox Code Playgroud)
在此模式中,使用 JSON 对象作为对象。
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++;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |