如何在Google脚本中将对象数组作为全局变量传递

时间:2019-04-28 23:19:51

标签: javascript google-apps-script

我有一个从JS传递到GS的对象数组。 这是一个对象数组的外观示例(根据用户输入而变化)

var playersArray = 
[
{number=1, 
role=Arsonist, 
deathStatus=false, 
guardianTargetStatus=false, 
executionerTargetStatus=false, 
roleblockStatus=false}, 

{number=2, 
role=Arsonist, 
deathStatus=false, 
guardianTargetStatus=false, 
executionerTargetStatus=false, 
roleblockStatus=false}, 

{number=3, role=Arsonist, 
deathStatus=false, 
guardianTargetStatus=false, 
executionerTargetStatus=false, 
roleblockStatus=false}
]

在我的代码中,我需要从该数组中调用一些数据。例如

var roleList = playersArray.map(function(role) {return role.role;});
Browser.msgBox(playersArray[1]["role"]);

当我直接在函数之间传递此playersArray时,一切都会变好。 不幸的是,对于我的功能之一,我需要拉这个数组而不直接传递它。

因此,我已将playerArray设置为GS中的属性

PropertiesService.getScriptProperties().setProperty('playersArray', JSON.stringify(playersArray)); 

然后我在相关函数中使用getProperty获取此数组:

var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray'); 
  playersArray = playersArray.replace(/\"/g, "").replace(/\:/g, "=");
  playersArray = playersArray.split(",");

由于某种原因,当我这样做时,函数无法正确看到数组:

var roleList = playersArray.map(function(role) {return role.role;});
Browser.msgBox(playersArray[1]["role"]);

请帮助我解决此问题。如果我用于将数组作为全局数组传递的解决方案不可行,那么我很高兴看到其他解决方案。但这必须是全局的,因为我不能在函数之间直接传递数组。

1 个答案:

答案 0 :(得分:1)

  • 您要将数组对象放入PropertiesService。
  • 从PropertiesService检索数组对象时,要使用playersArray作为数组对象。

如果我的理解是正确的,那么该修改如何?

发件人:

var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray');
playersArray = playersArray.replace(/\"/g, "").replace(/\:/g, "=");
playersArray = playersArray.split(",");

收件人:

var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray');
playersArray = JSON.parse(playersArray);

注意:

  • 请注意PropertiesService的配额。
    • 属性值大小为9kB / val
    • 物业总存储量为500kB /物业商店
  • 我认为在您的脚本中,playersArray可能类似于var playersArray = [{number: 1, role: "Arsonist", deathStatus: false, guardianTargetStatus: false, executionerTargetStatus: false, roleblockStatus: false},,,]。因为在将对象放入PropertiesService之前,Browser.msgBox(playersArray[1]["role"])才可以工作。当您看到playersArray的{​​{1}}时,您可能会像Logger.log(playersArray)一样看到。当var playersArray = [{number=1, role=Arsonist, deathStatus=false, guardianTargetStatus=false, executionerTargetStatus=false, roleblockStatus=false},,,]是对象时,当playersArray看到对象时,Logger.log(playersArray)将转换为:。我认为这是Google Apps脚本的规范。因此可以将使用=放入PropertiesService的对象转换为使用JSON.stringify()的对象。

参考文献:

如果我误解了你的问题,我表示歉意。