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

Javascript 如何在Google脚本中将对象数组作为全局变量传递,javascript,google-apps-script,Javascript,Google Apps Script,我有一个从JS传递到GS的对象数组。 下面是一个对象数组的外观示例(根据用户输入而变化) 在我的代码中,我需要从这个数组中调用一些数据。比如说 var roleList = playersArray.map(function(role) {return role.role;}); Browser.msgBox(playersArray[1]["role"]); 当我在函数之间直接传递这个PlayerArray时,一切都很好。 不幸的是,对于我的一个函数,我需要在不直接传递它的情况下提取这个数

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

在我的代码中,我需要从这个数组中调用一些数据。比如说

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

当我在函数之间直接传递这个PlayerArray时,一切都很好。 不幸的是,对于我的一个函数,我需要在不直接传递它的情况下提取这个数组

因此,我将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"]);

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

  • 您希望将数组对象置于PropertiesService
  • 从PropertiesService检索阵列对象时,您希望使用
    PlayerArray
    作为阵列对象
如果我的理解是正确的,这次修改怎么样

发件人: 致: 注:
  • 请注意财产服务的配额。
    • 属性值大小为9kB/val
    • 物业总存储容量为500kB/物业存储
  • 我认为在您的脚本中,
    playersArray
    可能类似于
    var playersArray=[{编号:1,角色:“纵火犯”,死亡状态:false,guardianTargetStatus:false,executionerTargetStatus:false,roleblockStatus:false},,]
    。因为在将对象放入PropertiesService之前,
    Browser.msgBox(playerArray[1][“role”])
    。当您通过
    Logger.log(playersArray)
    查看
    playersArray
    时,您可能会看到像
    var playersArray=[{number=1,role=arsister,death status=false,guardianTargetStatus=false,executionerTargetStatus=false,roleblockStatus=false},,]
    。当
    playersArray
    是对象时,当对象被
    Logger.log(playersArray)
    看到时,
    将转换为
    =
    。我认为这是谷歌应用程序脚本的规范。因此,使用
    JSON.stringify()
    放入PropertiesService的对象可以使用
    JSON.parse()
    转换为对象
参考资料:

如果我误解了你的问题,我道歉。

非常感谢!这解决了我的问题。我花了4天的时间试图解决这个问题,结果非常接近:)@Ilya Perelman谢谢你的回复。我很高兴你的问题解决了。
var roleList = playersArray.map(function(role) {return role.role;});
Browser.msgBox(playersArray[1]["role"]);

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);