Javascript 在Google Apps脚本中通过引用在函数之间传递变量
我对谷歌应用程序脚本非常陌生,几天前才开始学习。我以前有C++知识,但不多。 我试着写我的第一个脚本,在谷歌工作表上做一些动作。以下是我迄今为止创建的代码: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
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++中的问题,但我不知道如何在谷歌应用程序脚本中进行。 如果有人能帮我,我会很高兴的。 谢谢并致以最良好的祝愿, 最大值
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中,原语总是通过值传递,而对象总是通过引用传递。因此,您可以通过在函数之间传递一个配置对象,并使用其属性之一共享状态来装配一个简单的解决方案。谢谢,这是我关于堆栈溢出的第一个问题,您确实找到了答案。它真的帮助了我。谢谢你用我自己的代码展示它,因为它让我更容易获得它@谢谢你的回复。我很高兴你的问题解决了。